简体   繁体   English

尝试根据子属性对对象键进行排序

[英]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()

  • get all the keys from the Object using Object.keys() . 使用Object.keys()从Object获取所有键。
  • Simply sort all the keys by passing a custom 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

  • First, _.map to array of order and name . 首先,将_.mapordername数组。
  • Then, _.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM