【问题标题】:Add specific values of multidimensional array together Javascript将多维数组的特定值加在一起Javascript
【发布时间】:2013-04-18 15:14:23
【问题描述】:

好的,所以我有一个多维数组,它本身包含 9 个数组。这些嵌套数组中的每一个都包含 10 个数值。为了简单起见,假设一切看起来像这样:

var MyArray = [
[1,2,3,4,5,6,7,8,9,10],
[1,2,3,4,5,6,7,8,9,10],
[1,2,3,4,5,6,7,8,9,10],
[1,2,3,4,5,6,7,8,9,10],
[1,2,3,4,5,6,7,8,9,10],
[1,2,3,4,5,6,7,8,9,10],
[1,2,3,4,5,6,7,8,9,10],
[1,2,3,4,5,6,7,8,9,10],
[1,2,3,4,5,6,7,8,9,10]
]

我正在尝试编写一个函数,它将获取每个嵌套数组的第一个索引(在本例中为全 1)并将它们相加,将此值推送到数组或对象。然后,我需要这个函数继续,添加下一个索引的所有值,下一个,依此类推。最后,我应该有一个包含 10 个值的数组(或者一个对象也可以在这里工作)。值将是:

1+1+1+1+1+1+1+1+1,
2+2+2+2+2+2+2+2+2,
3+3+3+3+3+3+3+3+3...

...等等,所以新数组的实际值是这样的:

[9, 18, 27, 36, 45, 54, 63, 72, 81]

这里的问题是我需要通过灵活/动态来实现,这样它就可以在 MyArray 只有 6 个数组或者嵌套数组每个只有 4 个值的情况下工作。它应该适用于任何数量的嵌套数组,每个数组都有自己的值数量(尽管每个嵌套数组将包含彼此相同数量的值!)。

通过 JavaScript 和/或 jQuery 完成此任务的最佳方法是什么?请注意,我也可以以这种方式将值输出到对象:

{1:9, 2:18, 3:27, 4:36, 5:45, 6:54, 7:63, 8:72, 9:81}

我尝试在另一个 StackOverflow 线程中使用与此类似的代码来获取一个对象,但它正在返回

{1:NaN, 2:NaN, 3:NaN, etc.} 

该线程可以在这里找到:

Javascript Multidimensional Array: Add Values

我正在使用 Otto 提供的“下划线”方法和 jQuery $.each 部分。

有人可以帮忙吗?

【问题讨论】:

    标签: javascript arrays add multidimensional-array


    【解决方案1】:

    类似的东西

     var myData = [
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
         [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
     ];
    
     var summed = [];
    
     myData[0].forEach(function (arr, index) {
         var sum = myData.reduce(function (a, b) {
             return a + b[index];
         }, 0);
    
         summed.push(sum);
     });
    
     console.log(summed);
    

    开启jsfiddle

    【讨论】:

      【解决方案2】:

      这是另一个解决方案:

      var MyArray = [
      [1,2,3,4,5,6,7,8,9,10],
      [1,2,3,4,5,6,7,8,9,10],
      [1,2,3,4,5,6,7,8,9,10],
      [1,2,3,4,5,6,7,8,9,10],
      [1,2,3,4,5,6,7,8,9,10],
      [1,2,3,4,5,6,7,8,9,10],
      [1,2,3,4,5,6,7,8,9,10],
      [1,2,3,4,5,6,7,8,9,10],
      [1,2,3,4,5,6,7,8,9,10]
      ]
      
      var results= [];
      
      MyArray.map(function(a){
          for(var i=0;i<a.length;i++){
              if(results.length === a.length){
                  results[i] = results[i] + a[i];
              }else{
                  results.push(a[i]);
              }
          }
      });
      

      http://jsfiddle.net/uMPAA/

      【讨论】:

      • 嘿,肖恩,抱歉回复晚了,map 基本上循环遍历数组的每个值,所以 a 将是 MyArray 的每个值...希望有意义。
      【解决方案3】:

      一个简单的数组解决方案如下:

      var results= [];
      
      for (var i=0;i<MyArray.length;i++) {
          for(var j=0; j<MyArray[i].length; j++) {
              if(results[j] == undefined) { results[j] = 0; }
                results[j] = results[j]+data[i][j];
      
          }
      }
      

      注意if(results[j]==undefined) 行——这可能是你没有做的。如果你忽略它,你会在所有行上得到NaN,因为你正在向一个数字添加一个未定义的值。

      【讨论】:

        【解决方案4】:

        另一种对多维数组中的列求和的方法(基于Lodash 4)。

        var arrays = [
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        ];
        
        function sum_col(arrays) {
          return _.map(_.unzip(arrays), _.sum);
        }
        
        console.log(sum_col(arrays));
        &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"&gt;&lt;/script&gt;

        【讨论】:

          猜你喜欢
          • 2019-05-30
          • 2012-05-16
          • 1970-01-01
          • 2019-10-28
          • 2012-04-16
          • 2013-03-24
          • 2012-07-18
          • 2019-09-13
          • 1970-01-01
          相关资源
          最近更新 更多