2015-02-23 61 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