У меня есть этот объект:
var myObject = { cat: { order: 1 }, mouse: { order: 4 }, dog: { order: 2 }, shark: { order: 3 } }
Я пытаюсь вернуться: ["cat", "dog", "shark", "mouse"]
["cat", "dog", "shark", "mouse"]
Я пытался:
_.sortBy(x, function(e) { return e.order} )
Вот решение, использующее lodash.
lodash
Используйте для него _.map и _.sort.
_.map
_.sort
order
name
Используя цепочку lodash, упростите чтение кода.
_(myObject) .map((v, k) => ({order: v.order, name: k})) .sortBy('order') .map('name') .value()
сначала используйте Object.entries , а затем сортируйте по свойству order его второго элемента (, поскольку Object.entries возвращает массив собственного перечисляемого свойства данного объекта [ключ, значение] пар ), наконец, используйте Array.map , чтобы получить то, что вам нужно.
Object.entries
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)
Вы можете просто использовать Object.keys () и Array.sort () для него.
Object.keys()
Comparator
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);