返回数字数组的所有可能总和

时间:2013-10-31 07:33:00

标签: javascript arrays for-loop while-loop

我已经超过了我的代码一百万次,无法弄清楚问题。我已经制作了一个代码,它将返回数组中所有可能的数字总和。当数组中有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/

1 个答案:

答案 0 :(得分: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);