将多个数组中的值组合并求和

时间:2014-01-14 16:32:12

标签: javascript arrays for-loop

这里提供了所有相关代码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。

3 个答案:

答案 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”。 :)