比如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]]