![](/img/trans.png)
[英](JavaScript, Redux) Why are my nested array's getting deleted when returning, however when I don't return it doesn't?
[英]Javascript computing permutations - why is my code returning unwanted solution when I don't make a copy of the array?
以下是返回給定數組的所有排列的函數的代碼。
function getAllPerms(s) {
var perms = [];
if (s.length === 1) {
perms.push(s);
} else {
for (var i = 0; i < s.length; i++) {
var sub = s.slice(0);
sub.splice(i, 1);
var sp = getAllPerms(sub);
for (var o = 0; o < sp.length; o++) {
sp[o].unshift(s[i]);
perms.push(sp[o]);
}
}
}
return perms;
}
console.log(getAllPerms([1,2])); // result is [[1, 2], [2, 1]]
但是,如果我不復制該數組並拼接原始數組,則不會得到相同的輸出,並且我一直在絞盡腦汁理解為什么? 對我來說,似乎它應該以任何一種方式起作用。 以下是更改原始數組的代碼。
function getAllPerms(s) {
var perms = [];
var len = s.length
if (s.length === 1) {
perms.push(s);
} else {
for (var i = 0; i < len; i++) {
var digit = s[i];
s.splice(i, 1);
var sp = getAllPerms(s);
for (var o = 0; o < sp.length; o++) {
sp[o].unshift(digit);
perms.push(sp[o]);
}
}
}
return perms;
}
console.log(getAllPerms([1,2])); // result is [[2, 1], [2, 1]]
對於第一組代碼,我得到正確的結果,[[1,2],[2,1]],但是對於第二部分代碼,我得到了奇怪的結果,[[2,1],[2,1] ]。 無法為我的生活弄清楚發生了什么事。
當您運行更改原始數組的代碼時,實際上是將輸入數組s
修改為首先[1,2]
然后是[2,1]
,而返回數組只是原始數組s
多次,因此修改成為第二個元素的s
也會將其修改為第一個元素。
通過運行以下命令,您可以更簡單地看到效果:
var x = [1,2]
var p = []
p.push(x)
x[0] = 2
x[1] = 1
p.push(x)
觀察每行之后x
和p
變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.