gpt4 book ai didi

javascript - JS使用lodash根据对象值对高级对象数组进行排序

转载 作者:行者123 更新时间:2023-11-29 16:02:35 25 4
gpt4 key购买 nike

我有以下结构:

let drives = [
{id: 1, moves:[
{moveId: 1, difference: 1},
{moveId: 2, difference: 2}]
},
{id: 2, moves:[
{moveId: 1, difference: -2}]
},
{id: 3, moves:[
{moveId: 1, difference: 5},
{moveId: 2, difference: 2},
{moveId: 3, difference: 4}]
},
{id: 4, moves:[
{moveId: 1, difference: 6}]
}
]

现在我想根据移动的差异对驱动器数组进行排序。结果应该是这样的(取决于排序顺序)。

let drives = [
{id: 2, moves:[
{moveId: 1, difference: -2}]
},
{id: 1, moves:[
{moveId: 1, difference: 1},
{moveId: 2, difference: 2}]
},
{id: 3, moves:[
{moveId: 2, difference: 2},
{moveId: 3, difference: 4},
{moveId: 1, difference: 5}]
},
{id: 4, moves:[
{moveId: 1, difference: 6}]
}
]

我尝试使用这段代码对 lodash 进行此操作

_.orderBy(drives, 'moves.difference', 'asc');

但这似乎什么都不做。有没有人知道如何处理这个?

最佳答案

您可以使用嵌套方法,对内部 moves 进行排序,然后通过对第一个元素进行排序来对外部 move 进行排序。

var drives = drives = [{ id: 1, moves: [{ moveId: 1, difference: 1 }, { moveId: 2, difference: 2 }] }, { id: 2, moves: [{ moveId: 1, difference: -2 }] }, { id: 3, moves: [{ moveId: 1, difference: 5 }, { moveId: 2, difference: 2 }, { moveId: 3, difference: 4 }] }, { id: 4, moves: [{ moveId: 1, difference: 6 }] }];

console.log(
_(drives)
.map(o => Object.assign({}, o, { moves: _.sortBy(o.moves, 'difference') }))
.sortBy(({ moves: [{ difference }] }) => difference)
.value()
);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

关于javascript - JS使用lodash根据对象值对高级对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com