Javascript矩阵添加任意数量的数组值,而不使用array.map()
我正在尝试为AngularJS应用程序构建一个助手函数,但解决方案不必使用angular.forEach。该函数应采用任意数量的长度相同的数组,并将这些值相加形成一个新数组,例如:Javascript矩阵添加任意数量的数组值,而不使用array.map(),javascript,arrays,math,matrix,angularjs,Javascript,Arrays,Math,Matrix,Angularjs,我正在尝试为AngularJS应用程序构建一个助手函数,但解决方案不必使用angular.forEach。该函数应采用任意数量的长度相同的数组,并将这些值相加形成一个新数组,例如: a = [1, 2, 3]; b = [4, 5, 6]; result = [5, 7, 9]; 我试图不使用array.map或IE8兼容性。由于javascript似乎不喜欢在for循环中嵌套函数,我一直在循环参数。迄今为止的代码: function arrayAdd () { // make sure
a = [1, 2, 3];
b = [4, 5, 6];
result = [5, 7, 9];
我试图不使用array.map或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';
}
}
谢谢 如果阵列原型不存在,为什么不将其添加到阵列原型中
if (!('map' in Array.prototype)) {
Array.prototype.map= function(mapper, that /*opt*/) {
var other= new Array(this.length);
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
other[i]= mapper.call(that, this[i], i, this);
return other;
};
}
如果阵列原型不存在,为什么不将其添加到阵列原型中
if (!('map' in Array.prototype)) {
Array.prototype.map= function(mapper, that /*opt*/) {
var other= new Array(this.length);
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
other[i]= mapper.call(that, this[i], i, this);
return other;
};
}
不需要映射,只需在合计数组时跟踪它们 这不会检查数组是否具有相同的长度-
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
*/
不需要映射,只需在合计数组时跟踪它们 这不会检查数组是否具有相同的长度-
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。将数组和循环写在纸上会有所帮助。希望这对其他人有帮助
function arrayAdd () {
// ensure all args have same length
var totalLen = 0;
angular.forEach(arguments, function (arg) {
totalLen += arg.length;
});
var difLen = arguments[0].length === totalLen / arguments.length;
if (difLen) {
var arrNew = mkYrArray(0, arguments[0].length, 0);
// helper function to make an empty array, not shown here
angular.forEach(arguments, function (arr, i1) {
// each loop is an array from arguments
angular.forEach(arr, function (arrValue, i2) {
// each loop is a value from array
arrNew[i2] += arrValue;
});
});
return arrNew;
} else {
throw 'arrayAdd expects args w/ equal len';
}
}
算出来了,不需要array.map。将数组和循环写在纸上会有所帮助。希望这对其他人有帮助
function arrayAdd () {
// ensure all args have same length
var totalLen = 0;
angular.forEach(arguments, function (arg) {
totalLen += arg.length;
});
var difLen = arguments[0].length === totalLen / arguments.length;
if (difLen) {
var arrNew = mkYrArray(0, arguments[0].length, 0);
// helper function to make an empty array, not shown here
angular.forEach(arguments, function (arr, i1) {
// each loop is an array from arguments
angular.forEach(arr, function (arrValue, i2) {
// each loop is a value from array
arrNew[i2] += arrValue;
});
});
return arrNew;
} else {
throw 'arrayAdd expects args w/ equal len';
}
}
这是一个很好的解决方案,没有任何依赖项。有道理。谢谢我需要更多的实践在js循环。我的另一个解决方案略短,但依赖于AngularJS。这是一个很好的解决方案,没有任何依赖关系。有道理。谢谢我需要更多的实践在js循环。我的另一个解决方案略短,但取决于AngularJS。谢谢Dave。你说得很对。解决方案不需要array.map。我想得太多了,谢谢你,戴夫。你说得很对。解决方案不需要array.map。我想得太多了。问题是,如果你没有可用的映射,你从哪里得到forEach?我使用AngularJS,支持非常基本的IE8,但对映射数组没有任何支持。你的答案是正确的,因为你是真正独立的。问题是,如果你没有可用的映射,你从哪里得到forEach?我使用AngularJS,具有非常基本的IE8支持,但对映射数组没有任何支持。你的回答是正确的,因为你是真正独立的。