![](/img/trans.png)
[英]Why angularJs updates all elements of an array/hashmap, if only one changed?
[英]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.