为什么当我将轨道推送到数组时,数组中的所有元素都发生了变化
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)
这将track 数组的引用保留在res 数组中。当您之后更改曲目时, res 数组也会更改。因此,您需要通过执行 [...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]
我尝试解决 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)
这将track 数组的引用保留在res 数组中。当您之后更改曲目时, res 数组也会更改。因此,您需要通过执行 [...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]