好的,所以我有一个多维数组本身包含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部分。
任何人都可以在这里帮忙吗?
答案 0 :(得分: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);
上
答案 1 :(得分:0)
一个简单的数组解决方案如下:
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
,因为您要为数字添加未定义的值。
答案 2 :(得分:0)
这是另一种解决方案:
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]);
}
}
});
答案 3 :(得分:0)
另一种对多维数组中的列求和的方法(基于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>