将多维数组的特定值添加到Javascript中



好的,我有一个多维数组,它本身包含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]

这里的catch是,我需要这是灵活的/动态的,这样它将在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多维数组:Add Values

我使用"下划线"方法和jQuery $。每个部分由Otto提供。

有谁能帮忙吗?

像这样

 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

这是另一个解决方案:

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/

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

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,因为您正在向数字添加未定义的值。

多维数组中列和的另一种方法(基于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));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

相关内容

  • 没有找到相关文章

最新更新