首页 > 关于JS中两个数组对应相加的问题

关于JS中两个数组对应相加的问题

比如var a=[1,2,3];
b=[4,5,6];
如何能得到[5,7,9]这样的数组。

嘛。。其实我的情况是
a=[[1,1],[2,2]];
b=[[3,3],[4,4]];
想得到[[4,4],[6,6]]

求大神帮忙!!


用underscre或者lodash吧


var a=[[1,1],[2,2]];
var b=[[3,3],[4,4]];

//将b数组的值加到a中
arrayAdd(a,b);

/*
* 传入两数组参数a,b
* 将a,b数组相加,结果保存在a数组中
* 要求a,b数组的格式保持一致,且数组值不为函数或对象,不然抛出错误
*/
function arrayAdd(a,b){
    //检查传入的两个参数是否都是数组
    if(Array.isArray(a)&&Array.isArray(b)){
        //检查数组长度
        if(a.length!=b.length){
            throw new Error("数组格式不一致!");
        } 
        //遍历数组
        a.forEach(function(val,index){
            //如果两数组中的值还是数组,则递归
            if(Array.isArray(val)&&Array.isArray(b[index])){
                arrayAdd(a[index],b[index]);
            }//如果两数组中的值都不是数组,则相加
            else if(!Array.isArray(val)&&!Array.isArray(b[index])){
                //排除对象值和函数值
                if((typeof val!="function" && typeof val!="object") && 
                    (typeof b[index]!="function" && typeof b[index]!="object")){
                    a[index]+=b[index];        
                }else{
                    throw new Error("数组元素不允许为函数或对象!");
                }
            }//否则抛出错误
            else{
                throw new Error("数组格式不一致");
            }
        });
    }else{
        throw new Error("请传入数组参数!");    
    }
}

针对题主的情况,“数组的数组”相加:

function arrAdd(arr1,arr2){
    if(arr1.length != arr2.length) {
        alert('数组长度不相等');
        return;
    }
    var arrSum = arr1;
    for(var i=0,len=arr1.length;i<len;i++){
        for(var j=0;j<arr1[i].length;j++){
            if(arr1[i].length != arr2[i].length){
                alert('子数组长度不相等');
                return;
            } else {
                arrSum[i][j] = arr1[i][j] + arr2[i][j];                    
            }
        }
    }
    return arrSum;
}

因为js不支持真正的多维数组,所以不能像下面这样直接初始化:

var arrSum = [];//声明一个空数组
...
arrSum[i][j] = arr1[i][j] + arr2[i][j];//Uncaught TypeError: Cannot set property '0' of undefined

用 map 函数就行了

function plus(a, b) {
  return a.map(function(e, i){
    return e.map(function(e2, j) {
      return e2 + b[i][j];
    });
  });
}

map 函数参考


underscorejs


// a=[[1,1],[2,2]];
// b=[[3,3],[4,4]];
_.map(_.zip(a, b), function(arr){ return _.map(_.zip(arr[0], arr[1]), function(arr){return arr[0] + arr[1];}); }); 
//[[4,4],[6,6]]
【热门文章】
【热门文章】