扫码关注官方订阅号
比如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]]
求大神帮忙!!
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("请传入数组参数!"); } }
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]]
针对题主的情况,“数组的数组”相加:
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 函数参考
用underscre或者lodash吧
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
underscorejs
针对题主的情况,“数组的数组”相加:
因为js不支持真正的多维数组,所以不能像下面这样直接初始化:
用 map 函数就行了
map 函数参考
用underscre或者lodash吧