gpt4 book ai didi

javascript - 使用 lodash(或 vanilla javascript)对对象数组进行排序和过滤

转载 作者:行者123 更新时间:2023-12-04 08:48:20 25 4
gpt4 key购买 nike

我有这个对象,我想通过只保留对象的 2 个最高值来排序和过滤。

obj={ A :[{
asset: 9,
biodiversity: 4,
infrastructure: 15,
deflation: 11,
energy: 9
}],
B:[{
asset: 12,
biodiversity: 10,
infrastructure: 9,
deflation: 7,
energy: 15
}],
C:[{
asset: 2,
biodiversity: 12,
infrastructure: 6,
deflation: 6,
energy: 8
}]}
我想按对象的值对对象进行排序并过滤掉 2 个最高值,例如:
{A :[{
infrastructure: 15,
deflation: 11
}],
B:[{
energy: 15,
asset: 12
}],
C:[{
biodiversity: 12,
energy: 8
}]}
我试过这个排序:
Object.keys(obj).forEach((a) => _.sortBy(obj[a][0])))
但这显然是错误的。
我正在使用 lodash,但也会接受 vanilla javascript 解决方案。

最佳答案

您可以获取内部对象的条目并按值降序排序,获取前两个键/值对并从中构建一个新对象。

const
data = { A: [{ asset: 9, biodiversity: 4, infrastructure: 15, deflation: 11, energy: 9 }], B: [{ asset: 12, biodiversity: 10, infrastructure: 9, deflation: 7, nergy: 15 }], C: [{ asset: 2, biodiversity: 12, infrastructure: 6, deflation: 6, energy: 8 }]},
result = Object.fromEntries(Object
.entries(data)
.map(([k, a]) => [k, a.map(o => Object.fromEntries(Object
.entries(o)
.sort((a, b) => b[1] - a[1])
.slice(0, 2)
))])
);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用 lodash(或 vanilla javascript)对对象数组进行排序和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64199068/

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