JS或JQuery 取数组中相同的内容

[['1','a','b'],['2','a','c'],['2','a','b'],['3','a','b'],['2','a','c']]
得到結果
[['6','a','b'],['4','a','c']]

当第2、3位相同时将第一位的算和,请问各位大神用JS或JQuery 有什么好方法?谢谢了

3个回答

     var arr = [['1', 'a', 'b'], ['2', 'a', 'c'], ['2', 'a', 'b'], ['3', 'a', 'b'], ['2', 'a', 'c']];
    var kv = {},k;
    for (var i = 0; i < arr.length; i++) {
        k = arr[i][1] + arr[i][2]
        kv[k] = (kv[k] || 0) + parseInt(arr[i][0]);
    }
    var rst = [];
    for (k in kv) rst.push([kv[k]].concat(k.split('')));
    console.log(rst)
 <script>
var arr=[['1','a','b'],['2','a','c'],['2','a','b'],['3','a','b'],['2','a','c']];
var obj={};
for(var i=0;i<arr.length;i++){
   var subArr = arr[i];
   var key = subArr[1]+','+subArr[2];
   if(!obj[key]){
      obj[key] = 0;
   }
   obj[key] = parseInt(obj[key],10)+parseInt(subArr[0],10);
}
debugger;
var result = [];
for(var m in obj){
   result[result.length] =[obj[m]].concat(m.split(","));
}
alert(result);
</script>
ZSHL0827
ZSL& 謝謝
5 年多之前 回复
danielinbiti
danielinbiti 呃,已经贴了一个了呀
5 年多之前 回复
var arr = [[1, 'a', 'b'],[2, 'a', 'c'],[2, 'a', 'b'],[3, 'a', 'b'],[2, 'a', 'c']];
var arrTemp = [];
var result = [];

arr.forEach(function (item) {
    var len = item.length;
    var n = parseInt(item[0]);//第一个值,用来相加
    var o = item.slice(1, len).join("");//将数组后面的单个字符连接在一起作为对象的属性,无论后面有几个都可以做到只要属性相同就求和
    var hasItem = false;

    //判断是否已经存在该属性。
    arrTemp.forEach(function (obj, index) {
                //已经存在,则直接计算和,然后更新
                if (obj.hasOwnProperty(o)) {
                    var t = obj[o] + n;//t为原来的和加上现在的值
                    var zz = {};
                    zz[o] = t;

                    arrTemp[index] = zz;//更新

                    hasItem = true;

                    return false;
                }
            }
    )
    //不存在则加入
    if (!hasItem) {
        var zz = {};
        zz[o] = n;

        arrTemp.push(zz);
    }
});

//从对象数组中取出需要的数组结果。
arrTemp.forEach(function (o) {
    for (i in o) {
        if (o.hasOwnProperty(i)) {
            var strArr = i.toString().split("");//对象的属性字符串转成数组。
            var r = [o[i].toString()].concat(strArr);

            result.push(r);
        }
    }
});

console.log(result);
立即提问
相关内容推荐