javascript – 使用lodash通过嵌套属性对对象数组进行排序

我有一个像这样的对象数组

[{‘a’:{id:4}},{‘b’:{id:3}},{‘c’:{id:2}},{‘d’:{id:5}}]

我想知道lodash根据id对对象进行排序.我希望收到类似[‘d’,’a’,’b’,’c’]的内容.

我试图搜索这个,但我没有找到一个适用于每个对象中不同键的答案.我尝试用lodash的不同功能(很多)做到这一点.所以我认为可能有一个好的,也许是简短的方法来解决这个问题.

最佳答案
这是一个简单的JavaScript解决方案.

由于你想得到排序的键作为结果,这个解决方案不会修改原始数组,这要归功于排序前的第一个映射:

const data = [{ 'a': { id: 4 }}, { 'b': { id: 3 }}, { 'c': { id: 2 }}, { 'd': { id: 5 }}];

const sorted = data
  .map(x => Object.entries(x)[0])
  .sort((a, b) => b[1].id - a[1].id)
  .map(x => x[0]);
  
console.log(sorted);

如果您不关心改变原始数组,可以使用Object.values()直接排序,然后使用Object.keys()返回第一个键:

const data = [{ 'a': { id: 4 }}, { 'b': { id: 3 }}, { 'c': { id: 2 }}, { 'd': { id: 5 }}];

const sorted = data
  .sort((a, b) => Object.values(b)[0].id - Object.values(a)[0].id)
  .map(x => Object.keys(x)[0]);
  
console.log(sorted);

转载注明原文:javascript – 使用lodash通过嵌套属性对对象数组进行排序 - 代码日志