[英]Trying to sort object keys based on child property
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"]
我正在尝试找回: ["cat", "dog", "shark", "mouse"]
I tried: 我试过了:
_.sortBy(x, function(e) { return e.order} )
You can simply use Object.keys() and Array.sort() for it. 您可以简单地使用Object.keys()和Array.sort() 。
Object.keys()
. 使用Object.keys()
从Object获取所有键。 Comparator
to the sort function which compares the order property of the keys in the object. 只需将自定义的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);
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. 首先使用Object.entries ,然后按其第二个元素的order属性排序( 因为Object.entries
返回给定对象自己的可枚举属性[key,value]对的数组 ),最后使用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]) )
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
. 这是使用lodash
的解决方案。
Use _.map
and _.sort
for it. _.map
使用_.map
和_.sort
。
_.map
to array of order
and name
. 首先,将_.map
到order
和name
数组。 _.sort
and _.map
name
然后, _.sort
和_.map
name
By using lodash chain, make the code easy to read. 通过使用lodash链,使代码易于阅读。
_(myObject)
.map((v, k) => ({order: v.order, name: k}))
.sortBy('order')
.map('name')
.value()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.