簡體   English   中英

為什么當我將軌道推到數組時,數組中的所有元素都改變了

[英]why when I push the track to array, all the elements in array changed

我嘗試解決 leetcode 46. JS 中的排列,但是下面的代碼得到錯誤的結果,但是當使用res.push([...track])而不是res.push(track)時會正確。 我對此感到困惑,在我看來,這兩個是相同的。 謝謝!

var permute = function(nums) {
    const res = []
    backtrack(res, [], nums)
    
    return res
};

var backtrack = function(res, track, nums) {
    if (track.length == nums.length) {
        console.log('track: ', track)
        console.log('res: ', res)
        console.log()

        res.push(track)
        //res.push([...track])
        return 

    }
    
    for (let i = 0; i < nums.length; i++) {
        if (track.includes(nums[i])) continue      
        track.push(nums[i])
        backtrack(res, track, nums)
        track.pop()
    }
}

const res = permute([1,2,3])
console.log(res)

因為res.push(track)這將軌道數組的引用保留在 res 數組中。 當你改變軌道之后 res 數組也會改變。 因此,您需要通過[...track]使用 track 中的項目創建一個新數組。 例如,

 let res = []; let track = [1,2,3]; res.push(track); track.push(4); console.log(track); // [1,2,3,4] console.log(res); //[1,2,3,4] res = []; track = [1,2,3]; res.push([...track]); track.push(4); console.log(track); // [1,2,3,4] console.log(res); //[1,2,3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM