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

Bat*_*man 1 javascript lodash

我有这个对象:

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

    mouse: {
        order: 4
    },

    dog: {
        order: 2
    },   

    shark: {
        order: 3
    }
}
Run Code Online (Sandbox Code Playgroud)

我想回去: ["cat", "dog", "shark", "mouse"]

我试过了:

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

amr*_*ngh 7

您可以简单地使用Object.keys()Array.sort().

  • 从Object获取所有键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);
Run Code Online (Sandbox Code Playgroud)


Sph*_*inx 5

首先使用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])
)
Run Code Online (Sandbox Code Playgroud)