JS:使用 _orderBy() 对嵌套数组进行排序时保留顶级键

JS: preserve top level keys when sorting nested array with _orderBy()

我正在尝试使用 _orderBy() 进行排序和排列,不幸的是,它的副产品会吹走顶级数组键!我需要能够按那些顶级键和子键进行排序(这很好)。

bigArray = {
  "22H7564": {  //  <------  these are the top level keys
    "name":"Thor",
    "age:"600",
    "height":187,
  },
  "20H3211": {
    "name":"Mesa",
    "age:"42",
    "height":120,
  },
  "27H4506": {
    "name":"Jesper",
    "age:"122",
    "height":143,
  },
}

这是排序后的结果(_orderBy(BigArray, 'name', 'desc')):

bigArray = {
  "0": {  //  <------  FRAAACK!  i need these!
    "name":"Jesper",
    "age:"122",
    "height":143,
  },
  "1": {
    "name":"Mesa",
    "age:"42",
    "height":120,
  },
  "2": {
    "name":"Thor",
    "age:"600",
    "height":187,
  },
}

有没有办法对这些顶级键进行排序和保存?我也需要能够对它们进行排序。

那是因为你的bigArray实际上是一个对象而不是数组。将其定义为数组 [],您将获得所需的结果。

bigArray = [{
  "22H7564": {  //  <------  these are the top level keys
    "name":"Thor",
    "age":"600",
    "height":187,
  },
  "20H3211": {
    "name":"Mesa",
    "age":"42",
    "height":120,
  },
  "27H4506": {
    "name":"Jesper",
    "age":"122",
    "height":143,
  },
}]

console.log(_.orderBy(bigArray, 'name', 'desc'));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>

在@Paul 的启发性示例引发的大量研究之后,我终于偶然发现了这个解决方案,感谢不是 文章,而是the comment by Max Loh at the very bottom of this blog post。这是这个问题的解决方案,效果很好。只需要在下游代码中调整两件事。无论如何。

let newArray= Object.entries(bigArray).map(e => ({ id: e[0], data: e[1] }))

这有效地将我的对象转换为一个数组,我可以使用 _.orderBy 轻松对其进行排序。 aaand 我学习了更深层次的 JS 来启动。双赢。 :)

希望这对其他人有帮助。