gpt4 book ai didi

javascript - 如果少数键值对相同​​且另一个键值小于其他对象,则删除对象数组中的对象

转载 作者:行者123 更新时间:2023-12-01 01:35:07 25 4
gpt4 key购买 nike

我有这种类型的对象

var array = [ 
{ "foo": 1, "bar": 2, "baz": 3 },
{ "foo": 1, "bar": 2, "baz": 5 },
{ "foo": 1, "bar": 2, "baz": 4 },
{ "foo": 2, "bar": 1, "baz": 3 },
{ "foo": 2, "bar": 1, "baz": 7 },
{ "foo": 1, "bar": 3, "baz": 4 }
]

如果“foo”和“bar”键值相同,则选择“baz”键值更大并删除其他对象。

像这样

[ { "foo": 1, "bar": 2, "baz": 5 },
{ "foo": 2, "bar": 1, "baz": 7 },
{ "foo": 1, "bar": 3, "baz": 4 } ]

我试过这个solution但这对我不起作用。这个question不像我的问题。

那么,下划线/lodash库或仅在javascript中的解决方案是什么。

最佳答案

使用 lodash,您可以按 foobaz 值的组合进行分组。然后映射结果,并选择每组中 baz 值最高的对象:

var array = [ 
{ "foo": 1, "bar": 2, "baz": 3 },
{ "foo": 1, "bar": 2, "baz": 5 },
{ "foo": 1, "bar": 2, "baz": 4 },
{ "foo": 2, "bar": 1, "baz": 3 },
{ "foo": 2, "bar": 1, "baz": 7 },
{ "foo": 1, "bar": 3, "baz": 4 }
]

var result = _.map(
_.groupBy(array, o => `${o.foo}-${o.bar}`),
g => _.maxBy(g, 'baz')
)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

使用 vanilla JS,您可以使用类似的累加器键约定(barbaz 的组合)将数组简化为一个对象(累加器)。每当数组中的对象和累加器中存储的对象具有相同的键时,将保留具有最高 baz 值的对象。

const array = [ 
{ "foo": 1, "bar": 2, "baz": 3 },
{ "foo": 1, "bar": 2, "baz": 5 },
{ "foo": 1, "bar": 2, "baz": 4 },
{ "foo": 2, "bar": 1, "baz": 3 },
{ "foo": 2, "bar": 1, "baz": 7 },
{ "foo": 1, "bar": 3, "baz": 4 }
]

const result = Object.values(array.reduce((r, o) => {
const key = `${o.foo}-${o.bar}`

if(!r[key] || r[key].baz < o.baz) r[key] = o

return r
}, {}))

console.log(result)

关于javascript - 如果少数键值对相同​​且另一个键值小于其他对象,则删除对象数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52900144/

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