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 来启动。双赢。 :)
希望这对其他人有帮助。
我正在尝试使用 _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 来启动。双赢。 :)
希望这对其他人有帮助。