使用 lodash 按嵌套属性对对象数组进行排序

Pic*_*ana 4 javascript lodash

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

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

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

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

jo_*_*_va 5

这是一个简单的 JavaScript 解决方案。

由于您希望获得排序后的键作为结果,此解决方案不会修改原始数组,这要归功于map之前的第一个sort

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);
Run Code Online (Sandbox Code Playgroud)

如果你不关心改变原始数组,你可以直接使用排序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);
Run Code Online (Sandbox Code Playgroud)