首页 > 如何累加类型为对象数组的JSON集合的属性,在线等

如何累加类型为对象数组的JSON集合的属性,在线等

如何将类型为对象数组的 json 集合 arr 中的 price 属性累加计算,生成 obj_1arr_1

用原生 jsfor 循环 或 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就传一个 []

【热门文章】
【热门文章】