Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript矩阵添加任意数量的数组值,而不使用array.map()_Javascript_Arrays_Math_Matrix_Angularjs - Fatal编程技术网

Javascript矩阵添加任意数量的数组值,而不使用array.map()

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

我正在尝试为AngularJS应用程序构建一个助手函数,但解决方案不必使用angular.forEach。该函数应采用任意数量的长度相同的数组,并将这些值相加形成一个新数组,例如:

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支持,但对映射数组没有任何支持。你的回答是正确的,因为你是真正独立的。