这里提供了所有相关代码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循环一起添加。我尝试了几件事,但它一直给我undefined或NaN。
答案 0 :(得分:3)
跑完后:
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]);
}
}
}
答案 1 :(得分:1)
您可能想尝试
total += four.myArraysCombined[0][x]
答案 2 :(得分:1)
我从你那里提取这个小提琴:
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);
tempMyArraysCombined.push(objName.myArray[x]);
}
objName.myArraysCombined.push(tempMyArraysCombined);
}
将最后一行编辑为:
function prePickNumbers(objName, theNum, theSumNum, theMaxNum, theMinNum) {
/* your code */
objName.myArraysCombined=tempMyArraysCombined; //edit this line not push() but =
}
现在输出html中没有“UNDEFINED”。 :)