2015-11-12 70 views
1

下面是解決方案leetcode的組合問題https://leetcode.com/problems/combinations/。基本上,n選擇k,返回所有可能性。我遇到了我的第二個for循環,你看javascript array.push(array.push(x))奇怪的結果

tmpResult[i].push(n); 
result.push(tmpResult[i]); 

,如果我做

result.push(tmpResult[i].push(n)); 

內這個問題的結果是非常不同的,我得到一個錯誤:22 線:類型錯誤:tmpResult [我] .push不是一個函數。 我來自java的世界,什麼是JavaScript做不同的行代碼不同於上面的2行?

var combine = function(n, k) { 
    if (k === 0 || k > n) 
     return []; 

    var result = []; 

    if (k === 1) { 
     for (var i = 1; i <= n; i++) { 
      result.push([i]); 
     } 
     return result; 
    } 
    // choose n 
    var tmpResult = combine(n-1,k-1); 

    for(var i = 0; i < tmpResult.length; i++) { 
     tmpResult[i].push(n); 
     result.push(tmpResult[i]); 
     // below doesnt work 
     // result.push(tmpResult[i].push(n)); 
    } 

    // not choose n 
    result = result.concat(combine(n-1, k)); 

    return result; 
}; 

回答

0

Array.prototype.push()

The push() method adds one or more elements to the end of an array and returns the new length of the array.

要添加的陣列來result的長度,這就是爲什麼result.push(tmpResult[i].push(n));不起作用。

+0

謝謝,我應該更仔細地看過api! –

0

方法push返回數組的新大小,而不是數組本身

+0

謝謝,我應該更仔細地看過api! –