0

我正在尝试使用_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,
  },
}

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

4

2 回答 2

2

在@Paul 的启发性示例引发的大量研究之后,我终于偶然发现了这个解决方案,不是这篇文章,而是Max Loh在这篇博文底部评论。这是解决此问题的方法,并且效果很好。只需要在下游代码中调整两件事。反正。

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

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

希望这对其他人有帮助。

于 2020-05-20T05:31:20.783 回答
1

那是因为你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>

于 2020-05-19T21:23:09.310 回答