此处提供了所有相关代码http://jsfiddle.net/DuWGj/ ,以及 print(appendTo) 语句。
为简短起见,我制作了 4 个数组。每个数组有 4 个数字。然后我创建一个新数组,其中包含所有这 4 个数组编号,因此它是一个数组。
例如最终结果是
four.myArraysCombined = [5,3,20,12,3,4,18,11,12,5,8,2,1,9,10,6];
然而,当我尝试
four.myArraysCombined[3]
,它说它是未定义的。
很明显,当我执行以下操作时,它不起作用
var total = 0;
for (var x = 0; x < 16; x++) {
total += four.myArraysCombined[x]);
}
我希望能够使用 for 循环将所有这些数字相加。我已经尝试了几件事,但它一直给我未定义或 NaN。
最佳答案
发生了什么
运行后:
prePickNumbers(four, 4, 40, 20, 1);
...four.myArraysCombined
的值是:
[[[2, 17, 20, 1], [7, 2, 20, 11], [7, 14, 3, 16], [12, 17, 3, 8]]]
换句话说,这不是您声称的结果。在继续之前,您应该验证在过程的每一步您都得到了您认为的结果。就目前而言,您没有展平的阵列。您需要先解决这个问题,然后再进行迭代和求和。
为什么会这样
最终结构的原因从 prePickNumbers
中的以下行开始:
tempMyArraysCombined.push(objName.myArray[x]);
您每次都将一个数组 插入另一个数组,因此循环后的结果是一个数组数组。但是,然后,您将那个结果插入另一个数组:
objName.myArraysCombined.push(tempMyArraysCombined);
所以最终结果实际上是一个包含数组数组的数组(注意上面输出中额外的一组括号)。问题是您在此过程的每一步都将整个数组插入输出,这造成了嵌套的困惑。您应该推送每个数组的元素,而不是数组本身。
如何修复
这是一种可能的解决方案。将 prePickNumbers
替换为以下函数:
function prePickNumbers(objName, theNum, theSumNum, theMaxNum, theMinNum) {
var tempMyArraysCombined = [];
for (var x = 0; x < theNum; x += 1) {
pickNumbers(objName.myArray[x], theNum, theSumNum, theMaxNum, theMinNum);
for (var j = 0; j < objName.myArray[x].length; j++) {
objName.myArraysCombined.push(objName.myArray[x][j]);
}
}
}
关于javascript - 合并并求和多个数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118706/