我有这个对象:
var myObject = {
cat: {
order: 1
},
mouse: {
order: 4
},
dog: {
order: 2
},
shark: {
order: 3
}
}
我正试图找回:["cat", "dog", "shark", "mouse"]
我尝试过:
_.sortBy(x, function(e) { return e.order} )
答案 0 :(得分:7)
您可以简单地使用Object.keys()和Array.sort()。
Object.keys()
从对象中获取所有键。Comparator
传递给sort函数来对所有键进行简单排序,该函数比较对象中键的order属性。
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);
答案 1 :(得分:5)
首先使用Object.entries,然后按其第二个元素的 order 属性进行排序(因为Object.entries
返回给定对象自己的可枚举属性的数组> [键,值] 对),最后使用Array.map来获取所需的内容。
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])
)
答案 2 :(得分: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)
答案 3 :(得分:0)
这是使用lodash
的解决方案。
使用_.map
和_.sort
。
_.map
到order
和name
的数组。_.sort
和_.map
name
通过使用lodash链,使代码易于阅读。
_(myObject)
.map((v, k) => ({order: v.order, name: k}))
.sortBy('order')
.map('name')
.value()