我正在尝试为我的 AngularJS 应用构建一个辅助函数(但该解决方案不必使用 angular.forEach
)。该函数应采用任意数量的具有相同长度的数组,并将这些值加在一起形成一个新数组,例如:
a = [1, 2, 3];
b = [4, 5, 6];
result = [5, 7, 9];
我试图不使用 array.map() 或 sylvesterjs为了 IE8 的兼容性。我坚持循环参数,因为 javascript 似乎不喜欢在 for 循环中嵌套函数。到目前为止的代码:
function arrayAdd () {
// make sure all args have same length
var totalLen = 0;
angular.forEach(arguments, function (arg) {
totalLen += arg.length;
});
var avgLen = totalLen / arguments.length;
if (avgLen === arguments[0].length) {
var arrNew = mkArray(0, arguments[0].length);
// helper function to make an empty array, not shown here
// need to refactor below with loop for unlimited # of args
angular.forEach(arguments, function (arg, i) {
arrNew[0] += arg[0];
});
angular.forEach(arguments, function (arg, i) {
arrNew[1] += arg[1];
});
return arrNew;
} else {
throw 'arrayAdd expects args with equal length';
}
}
谢谢!
最佳答案
不需要 map ,您只需要在总计时跟踪数组。
(这不检查数组是否具有相同的长度-)
function sumArrayElements(){
var arrays= arguments, results= [],
count= arrays[0].length, L= arrays.length,
sum, next= 0, i;
while(next<count){
sum= 0, i= 0;
while(i<L){
sum+= Number(arrays[i++][next]);
}
results[next++]= sum;
}
return results;
}
var a= [1, 2, 3], b= [4, 5, 6], c= [1, 2, 3];
sumArrayElements(a, b, c)
/* returned value:(Array)
6, 9, 12
*/
关于在不使用 array.map() 的情况下添加任意数量的数组值的 Javascript 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16324399/