我有一个对象数组,如下所示:
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上阅读了类似的答案,并且只能获得前2个条件,而且格式也不符合我的需要。
我尝试过的,指的是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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句