如何将类型为对象数组的 json
集合 arr
中的 price
属性累加计算,生成 obj_1
或 arr_1
?
用原生 js
的 for
循环 或 underscore
如何实现?
var arr = [
{ id:1, name: '商户1', price: 400 },
{ id:3, name: '商户3', price: 200 },
{ id:2, name: '商户2', price: 100 },
{ id:1, name: '商户1', price: 200 },
{ id:4, name: '商户4', price: 800 },
{ id:2, name: '商户2', price: 600 },
{ id:1, name: '商户1', price: 400 }
];
var obj_1 = {
1: { name: '商户1', price: 1000 },
2: { name: '商户2', price: 700 },
3: { name: '商户3', price: 200 },
4: { name: '商户4', price: 800 },
}
var arr_1 = [
{ id:1, name: '商户1', price: 1000 },
{ id:2, name: '商户2', price: 700 },
{ id:3, name: '商户3', price: 200 },
{ id:4, name: '商户4', price: 800 },
];
试试这个
var reduced = arr.reduce(function(p, item) {
if (p[item.id]) {
p[item.id].price += item.price;
} else {
p[item.id] = {name: item.name, price: item.price};
}
return p;
}, {});
console.log(reduced);
var arr = [
{ id:1, name: '商户1', price: 400 },
{ id:3, name: '商户3', price: 200 },
{ id:2, name: '商户2', price: 100 },
{ id:1, name: '商户1', price: 200 },
{ id:4, name: '商户4', price: 800 },
{ id:2, name: '商户2', price: 600 },
{ id:1, name: '商户1', price: 400 }
];
var count = 0
var arr_1 = []
var obj_1 = []
for(var i=0;i<arr.length;i++){
var el_id = arr[i].id
var el_name = arr[i].name
if(el_id==1){
count += arr[i].price
}
var obj = {}
obj.id = el_id
obj.name = el_name
obj.price = count
arr_1[el_id-1] = obj
obj_1[el_id] = {name:el_name, price: count}
}
console.log(arr_1)
console.log(obj_1)
在写的过程中获得了成就感,写完的那一瞬间失落了
var sum = 0,arr_1=[...],arr_2=[...],arr_3=[...];
function counter(obj){
obj.forEach(function(item){
sum+=item.price;
})
}
counter(arr_1);
counter(arr_2);
counter(arr_3);
这种情况通常都可以用数组的reduce方法实现。
参考这里 reduce方法
array.reduce(callback,initvalue);
如果你最终想得到一个Object,那initvalue就传一个 {}
如果你最终想得到一个Array,那initvalue就传一个 []