javascript - 合并并求和多个数组中的值

标签 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 循环将所有这些数字相加。我已经尝试了几件事,但它一直给我未定义或 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/

相关文章:

javascript - 使用 jquery 删除表行

javascript - Angular - 监听特定的 DOM 插入,然后监听滚动事件

javascript - jQuery 不会正确地发布包含数组作为其属性之一的 JSON

c - 如何在c中使用动态字符串数组

python - 使用 pandas 按类别进行计算

excel - 如何在 VBA 中定义下一个循环的范围

java - Ajax 框架小应用程序

javascript - javascript 中动态返回和直接变量返回之间是否存在性能差异?

java - 如何在 Java 中将对象数组作为参数传递

python - 从 python 中的 if 循环返回到 for 循环