gpt4 book ai didi

javascript - 如何根据键名合并 2 个数组并根据合并值排序?

转载 作者:行者123 更新时间:2023-11-29 17:39:15 25 4
gpt4 key购买 nike

假设我有两个列表

const listA = [{"apple":100}, {"banana": 50}, {"pearl": 10}, {"cherry": 5}, {"kiwi": 3}]
const listB = [{"peach": 30}, {"apple": 15}, {"kiwi": 10}, {"mango": 5}]

问题是如何将两个列表合并为一个堆栈,将相同的项目以数字递增并按数量排序?我的意思是最终结果应该是 ->

const listMerged = [{"apple":115}, {"banana": 50} , {"peach": 30}, {"kiwi": 13}, {"pearl": 10}, {"cherry": 5}, {"mango": 5}]

我知道它会是这样的:

sortListDesc(list) {

return obj.sort(function (l1,l2) {
return l2< l1 ? -1
: l2 >l1 ? 1
: 0
})
}

但不知 Prop 体如何累加,只能按数量排序。

最佳答案

您可以使用 reduce , 和 sortObject.values像这样:

const listA = [{"apple":100}, {"banana": 50}, {"pearl": 10}, {"cherry": 5}, {"kiwi": 3}]
, listB = [{"peach": 30}, {"apple": 15}, {"kiwi": 10}, {"mango": 5}]

let merged = Object.values(listA.concat(listB).reduce((acc, a) => {
const [k, v] = Object.entries(a)[0];
(acc[k] = acc[k] || {[k]: 0})[k] += v;
return acc;
}, {}));

merged.sort((a, b) => Object.values(b)[0] - Object.values(a)[0]);
console.log(merged);

或者,

使用reduce,创建一个对象,将所有水果作为键,将单个总和作为值。然后使用 Object.entries , sortmap 像这样:

const listA = [{"apple":100}, {"banana": 50}, {"pearl": 10}, {"cherry": 5}, {"kiwi": 3}]
, listB = [{"peach": 30}, {"apple": 15}, {"kiwi": 10}, {"mango": 5}]

let merged2 = listA.concat(listB).reduce((acc, a) => {
const [k, v] = Object.entries(a)[0];
acc[k] = (acc[k] || 0) + v;
return acc;
}, {});

const final = Object.entries(merged2)
.sort(([, v1], [, v2]) => v2 - v1)
.map(([k, v]) => ({[k]: v}))

console.log(final);

关于javascript - 如何根据键名合并 2 个数组并根据合并值排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54194211/

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