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

Javascript 将多个数组中的值合并并求和,javascript,arrays,for-loop,Javascript,Arrays,For Loop,这里提供了所有相关代码以及printappendTo语句 为了简短起见,我制作了4个数组。每个数组有4个数字。然后我创建一个新数组,其中包含所有4个数组编号,因此它是一个数组 例如,最终结果是 four.myArraysCombined = [5,3,20,12,3,4,18,11,12,5,8,2,1,9,10,6]; 然而,当我尝试 四、myArraysCombined[3],它说它是未定义的 所以很明显,当我做下面的事情时,它不起作用 var total = 0; for (var x

这里提供了所有相关代码以及printappendTo语句

为了简短起见,我制作了4个数组。每个数组有4个数字。然后我创建一个新数组,其中包含所有4个数组编号,因此它是一个数组

例如,最终结果是

four.myArraysCombined = [5,3,20,12,3,4,18,11,12,5,8,2,1,9,10,6];
然而,当我尝试

四、myArraysCombined[3],它说它是未定义的

所以很明显,当我做下面的事情时,它不起作用

var total = 0;
for (var x = 0; x < 16; x++) {
    total += four.myArraysCombined[x]);
}
我希望能够将所有这些数字与for循环相加。我试过好几种方法,但它总是给我不确定或不确定的答案

您可能想试试

 total += four.myArraysCombined[0][x]
你可能想试试

 total += four.myArraysCombined[0][x]
发生了什么事 运行后:

prePickNumbers(four, 4, 40, 20, 1);
…four.myArraysCombined的值为:

换句话说,它不是你声称的结果。在继续之前,您应该验证您在流程的每个步骤中都有您认为的结果。目前,您没有展平阵列。您需要先解决这个问题,然后再进行迭代和求和

为什么会这样 最终结构的原因从PrepickNumber中的以下行开始:

每次都将一个数组推入另一个数组,因此循环后的结果是一个数组数组。但是,然后将该结果推送到另一个数组中:

objName.myArraysCombined.push(tempMyArraysCombined);
最后的结果实际上是一个包含数组数组的数组注意上面的输出中有一组额外的括号。问题在于,在流程的每一步都将整个数组推入到输出中,这会造成嵌套混乱。您应该推动每个数组的元素,而不是数组本身

如何修复它 这里有一个可能的解决方案。使用以下功能替换PrepickNumber:

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]);
        }
    }
}
发生了什么事 运行后:

prePickNumbers(four, 4, 40, 20, 1);
…four.myArraysCombined的值为:

换句话说,它不是你声称的结果。在继续之前,您应该验证您在流程的每个步骤中都有您认为的结果。目前,您没有展平阵列。您需要先解决这个问题,然后再进行迭代和求和

为什么会这样 最终结构的原因从PrepickNumber中的以下行开始:

每次都将一个数组推入另一个数组,因此循环后的结果是一个数组数组。但是,然后将该结果推送到另一个数组中:

objName.myArraysCombined.push(tempMyArraysCombined);
最后的结果实际上是一个包含数组数组的数组注意上面的输出中有一组额外的括号。问题在于,在流程的每一步都将整个数组推入到输出中,这会造成嵌套混乱。您应该推动每个数组的元素,而不是数组本身

如何修复它 这里有一个可能的解决方案。使用以下功能替换PrepickNumber:

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]);
        }
    }
}

我从你的小提琴中提取:

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); 
}
现在输出html中没有未定义的内容。

我从你的小提琴中提取:

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); 
}
现在输出html中没有未定义的内容。

您是否执行了console.logfour.myArraysCombined以查看是否真的生成了您认为自己拥有的数组?您可以生成组合数组,简单如下:myArrays.join.split.mapfunctionentry{return Numberentry}uhm。。。我不知道是不是错了。。。但是你把你的临时数组放到另一个空数组里。。。尝试使用=而不是推送我编辑你的小提琴-按照JSF中的注释进行操作你是否完成了console.logfour.myArraysCombined以查看你是否真的在生成你认为你拥有的数组?你可以生成你的组合数组,简单如下:myArrays.join.split.mapfunctionentry{return Numberentry}uhm。。。我不知道是不是错了。。。但是你把你的临时数组放到另一个空数组里。。。尝试使用=而不是push i edit your fiddle-跟随JSF中的注释此处显示的值是一个包含一个项目的数组,一个项目是一个包含4个项目的数组。请注意三个打开的方括号。这里显示的值是一个包含一个项目的数组,一个项目是一个包含4个项目的数组。请注意三个方括号[[[