gpt4 book ai didi

javascript - 如何从对象数组中为每个不同的 'number' 获取最大值为 'type' 的对象?

转载 作者:行者123 更新时间:2023-11-30 15:10:02 26 4
gpt4 key购买 nike

我有一个对象数组:

const myArr = [
{ type: 'one', number: 1, fiedld: 'aaa' },
{ type: 'one', number: 2, field: 'bb' },
{ type: 'two', number: 2, field: 'xxx' },
{ type: 'two', number: 1, field: 'zz' },
{ type: 'two', number: 3, field: 'y' }
]

我想为每个 type 获取最大值为 number 的对象。所以预期的结果是:

const newArr= [
{ type: 'one', number: 2, field: 'bb' },
{ type: 'two', number: 3, field: 'y' }
]

我目前的解决方案是:

sortByFields (field1, field2) {
return ((x, y) => {
return (
(x[field1] > y[field1]) - (y[field1] > x[field1])
|| (x[field2] > y[field2]) - (y[field2] > x[field2])
);
})
}

myArr.sort(this.sortByFields('type', 'number'));
let newArr = [];
for (let i = 0; i < myArr.length - 1; i++) {
if (myArr[i].type !== myArr[i + 1].type) {
newArr.push(myArr[i]);
}
if (i === myArr.length - 2) {
newArr.push(myArr[i + 1]);
}
}

我是 JS 的初学者,但我知道它可以用更合适的方式完成。

最佳答案

您可以使用 reduce() 为每种类型创建一个带有键的对象,然后使用 Object.values 获取对象数组。

const myArr = [{ type: 'one', number: 1, fiedld: 'aaa' },{ type: 'one', number: 2, field: 'bb' },{ type: 'two', number: 2, field: 'xxx' }, { type: 'two', number: 1, field: 'zz' }, { type: 'two', number: 3, field: 'y' }]

var result = Object.values(myArr.reduce(function(r, e) {
if(!r[e.type]) r[e.type] = e;
else if(e.number > r[e.type].number) r[e.type] = e;
return r;
}, {}))

console.log(result)

关于javascript - 如何从对象数组中为每个不同的 'number' 获取最大值为 'type' 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45237161/

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