gpt4 book ai didi

JavaScript - 通过计数查找对象数组中的唯一值并创建新的对象数组

转载 作者:行者123 更新时间:2023-12-02 14:31:13 27 4
gpt4 key购买 nike

我有一个对象数组,如下所示:

var arr =[
{
price:20,
rule:a
},
{
price:10,
rule:b
},
{
price:5,
rule:a
},
{
price:50,
rule:b
},
{
price:70,
rule:b
}
]

我想从中提取一个对象数组,如下所示:

var filteredArr = [
{
rule:a,
countOfRule:2,
minPriceForThisRule:5
},
{
rule:b,
countOfRule:3,
minPriceForThisRule:10
}
]

这意味着:

1) 我想创建一个没有的新数组。对象的唯一编号。第一个数组“arr”中的规则

2) 需要计算唯一规则重复次数并将其添加为新数组对象中的属性 - 给出“countOfRule”

3) 查找唯一规则类别中的最低价格 - 以“minPriceForThisRule”形式给出

我已经阅读了类似的答案,并且只能得到前两个条件,而且这也不是我需要的格式。

我尝试过的,引用SO上的链接:

var ff = {},e;
for (var i = 0,l=arr.length; i < l; i++) {
e = arr[i];
ff[e.rule] = (ff[e.rule] || 0) + 1;
}

但这只给出了一个对象

{
a : 2,
b: 3
}

最佳答案

您可以使用forEach来做到这一点和 thisArg 可选参数。

var arr = [{"price":20,"rule":"a"},{"price":10,"rule":"b"},{"price":5,"rule":"a"},{"price":50,"rule":"b"},{"price":70,"rule":"b"}], 
r = [];

arr.forEach(function(e) {
if(!this[e.rule]) {
this[e.rule] = {rule: e.rule, countOfRule: 0, minPriceForThisRule: e.price}
r.push(this[e.rule]);
}
this[e.rule].countOfRule++;
if(this[e.rule].minPriceForThisRule > e.price) this[e.rule].minPriceForThisRule = e.price;
}, {});

console.log(r)

关于JavaScript - 通过计数查找对象数组中的唯一值并创建新的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37812090/

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