最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Trying to sort object keys based on child property - Stack Overflow

programmeradmin6浏览0评论

I have this object:

var myObject = {
    cat: {
        order: 1
    },

    mouse: {
        order: 4
    },

    dog: {
        order: 2
    },   

    shark: {
        order: 3
    }
}

I'm trying to get back: ["cat", "dog", "shark", "mouse"]

I tried:

_.sortBy(x, function(e) { return e.order} )

I have this object:

var myObject = {
    cat: {
        order: 1
    },

    mouse: {
        order: 4
    },

    dog: {
        order: 2
    },   

    shark: {
        order: 3
    }
}

I'm trying to get back: ["cat", "dog", "shark", "mouse"]

I tried:

_.sortBy(x, function(e) { return e.order} )

Share Improve this question edited Sep 12, 2018 at 18:51 Luca Kiebel 10.1k7 gold badges32 silver badges46 bronze badges asked Sep 12, 2018 at 18:46 BatmanBatman 6,38322 gold badges88 silver badges161 bronze badges 3
  • First you need to get an array. – SLaks Commented Sep 12, 2018 at 18:50
  • _.keys – VLAZ Commented Sep 12, 2018 at 18:50
  • 1 Possible duplicate of Sorting JavaScript Object by property value – Dexygen Commented Sep 12, 2018 at 18:53
Add a ment  | 

4 Answers 4

Reset to default 7

You can simply use Object.keys() and Array.sort() for it.

  • get all the keys from the Object using Object.keys().
  • Simply sort all the keys by passing a custom Comparator to the sort function which pares the order property of the keys in the object.

var myObject = { cat: { order: 1 }, mouse: { order: 4 }, dog: { order: 2 }, shark: { order: 3 } };

let result = Object.keys(myObject).sort((a,b)=> myObject[a].order -  myObject[b].order);

console.log(result);

use Object.entries first, then sort by the order property of its second element (because Object.entries returns an array of a given object's own enumerable property [key, value] pairs), finally use Array.map to get what you need.

var myObject = {
  cat: {
    order: 1
  },
  mouse: {
    order: 4
  },
  dog: {
    order: 2
  },
  shark: {
    order: 3
  }
}

console.log(
  Object.entries(myObject).sort((a, b) => {
    return a[1].order - b[1].order
  }).map(item => item[0])
)

    var myObject = {
    cat: {
        order: 1
    },

    mouse: {
        order: 4
    },

    dog: {
        order: 2
    },   

    shark: {
        order: 3
    }
}     
let oKeys = Object.keys(myObject)

     let tempArray = []

     oKeys.forEach(function(key) {
        tempArray[myObject[key]['order']-1] = key
     })
          
   
     console.log(tempArray)

Here is a solution using lodash.

Use _.map and _.sort for it.

  • First, _.map to array of order and name.
  • Then, _.sort and _.map name

By using lodash chain, make the code easy to read.


 _(myObject)
   .map((v, k) => ({order: v.order, name: k}))
   .sortBy('order')
   .map('name')
   .value()
发布评论

评论列表(0)

  1. 暂无评论