js对象数组合并,求几个方法

根据相同的title把money相加,把arr合成arr1

1、简单处理

var map = {}, arr1 = [];

for (var i = 0; i < arr.length; i++) {
    if (!map[arr[i].title]) {
        arr1.push(arr[i]);
        map[arr[i].title] = true;
    } else {
        for (var j = 0; j < arr1.length; j++) {
            if (arr[i].title === arr1[j].title) {
                arr1[j].money = (Number(arr1[j].money) + Number(arr[i].money)).toString();
            }
        }
    }
}

2、以上面方法可以改成forEach(), filter等方法

 

简洁的方法还可以这样写:

var map = {};
var arr1 =  arr.reduce(function(a, b) {
    if (!map[b.title]) {
        map[b.title] = true && a.push(b);
    } else {
        a.forEach(function(item) {
            if (item.title === b.title) {
                item.money = (Number(item.money) + Number(b.money)).toString();
            }
        });
    }
    return a;
}, []);

 

去重简单,去重合并两个循环是少不了的了