2015-02-23 58 views
1

我对JavaScript非常了解(一直在研究它只有不到一周的时间),并且在计算从某个数组生成的子数组中的值的总和时遇到了问题。我可以使用此函数来完成:数组中的子阵列

function getSubs(arr) { 
    var newarr = []; 
    for (var i = 0; i < arr.length; i++){ 
    for (var j = arr.length; j > 0; j--){ 
     newarr.push(arr.slice(i, j)); 
    } 
    } 
    return newarr; 
} 

现在,如果这个函数被调用,例如用于阵列[1,2,3],结果是[[], [], [], [1], [2], [3], [2, 3], [1, 2], [1, 2, 3]]。我不明白为什么有三个空数组,但这与我试图实现的接近。此外,我想获得每个子阵列中的值的总和。我知道上面的代码很粗糙。希望有人能帮助我改进它。提前致谢!

+0

所以'[1,2,3]'是你的示例输入。但是你想要的输出是什么?目前还不清楚你在这里做什么。 – 2015-02-23 18:57:16

+0

您没有循环嵌套数组,并且分片代码没有意义... – epascarello 2015-02-23 18:58:46

回答

1

嵌套for的条件不正确。 从j > 0将其更改为j > i,它会很好地工作:

function getSubs(arr){ 
    var newarr = []; 
    for (var i=0;i<arr.length;i++){ 
    for (var j=arr.length;j>i;j--){ 
     newarr.push(arr.slice(i,j)); 
    } 
    } 
    return newarr; 
} 

输入:

[1,2,3] 

输出:

[[1,2,3],[1,2],[1],[2,3],[2],[3]] 

只是要注意:考虑Array.slice(initialOffset, finalOffset),它当返回一个非空数组时有意义。

+0

仍然需要包含空集,因为它被认为是子集https://www.google.com/search?q=power + set&ie = utf-8&oe = utf-8 – chiliNUT 2015-02-23 19:11:23

+0

@chiliNUT OP告诉我们要摆脱空的子阵列。 – falsarella 2015-02-23 19:12:46

+0

@chiliNUT只要提一下,如果OP真的想要一个权力集合,那么这个代码也不会检索'[1,3]''。 – falsarella 2015-02-23 19:15:47