0

我已经检查了我的代码一百万次,但无法找出问题所在。我编写了一个代码,它将返回数组中所有可能的数字总和。当数组中有 3 个数字时它可以正常工作,但是如果我向数组中添加另一个数字,它会用 NaN 替换一些应该是总和的数字。前任:

array = [4, 6, 3, 7] 正在返回:

[ 20, 16, 10, 13, 9, 14, 11, 7, 17, NaN, 13 ] 和 NaN 应该是“10”

array = [4, 6, 3, 7];
newarray = [0];
for (i = 0; i < array.length; i++) {
    newarray[0] += array[i];
}
x = 0;
y = 1;
for (i = 0; i < array.length; i++) {
    newarray.push((newarray[0]-array[i])); 
    if (i !== 0) {
        y = y+array.length; 
    }
    x = i;
    while (x < array.length) {
        if (x != i) {
            newarray.push((newarray[y]-array[x]));
        }
        x++;
    }
}
console.log(newarray);`

我在一些应该是数字的插槽中得到 NaN 的事实使我相信 while 循环中的变量 x 存在问题,但我的大脑正在思考问题的实际所在。 http://jsfiddle.net/nsjY6/

4

1 回答 1

1

newarray[y] 这里导致 NaN

newarray.push((newarray[y - 1]-array[x]));

[ 20, 16, 14, 17, 13, 14, 10, 6, 17, 10, 13 ]

添加我的版本

var array = [4, 6, 3, 7];

var newarray = [];

for (i=0; i< Math.pow(2, array.length); i++) {

    var s = i.toString(2)
    var t = 0;
    for (c in s) t += s[c] * array[c];

    newarray.push(t);
}

console.log(newarray);
于 2013-10-31T07:41:02.913 回答