gpt4 book ai didi

javascript - 意外值被插入数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:19:43 24 4
gpt4 key购买 nike

我认为在尝试插入数组时出现了奇怪的行为。输出数组时我看到了预期值。如果我插入数组然后输出,我会得到重复的值。有问题的代码:

var test = "aab";
testA = test.split("");
permutations = [];
generatePermutations(testA, testA.length);

function generatePermutations(array, arrayLength) {
if (arrayLength === 1) {
console.log(array); // THIS OUTPUTS DIFFERENT PERMUTATIONS
permutations.push(array);
console.log(permutations); // VALUES IN ARRAY ARE ALL THE SAME

/*
permutations.push(array.join(""));
console.log(permutations);
SPLITTING THE STRING MAKES IT WORK FINE?!
*/
return;
}

for (var i = 0; i < arrayLength; i += 1) {
generatePermutations(array, arrayLength - 1);

if (arrayLength % 2 == 0) {
swapArrayElements(array, i, arrayLength - 1);
} else {
swapArrayElements(array, 0, arrayLength - 1);
}
}
}

function swapArrayElements(array, elementA, elementB) {
var temp = array[elementA];
array[elementA] = array[elementB];
array[elementB] = temp;
}

console.log(array) 将按预期输出排列。它将在函数重复出现时输出所有排列:

[ 'a', 'a', 'b' ] [ 'a', 'a', 'b' ] [ 'b', 'a', 'a' ] [ 'a', 'b', 'a' ] [ 'a', 'b', 'a' ] [ 'b', 'a', 'a' ]

如果我将结果推送到另一个数组 permutations.push(array),每个元素都具有相同的值:

[ [ 'a', 'a', 'b' ], [ 'a', 'a', 'b' ], [ 'a', 'a', 'b' ], [ 'a', 'a', 'b' ], [ 'a', 'a', 'b' ], [ 'a', 'a', 'b' ] ]

如果我在将数组推送到排列时加入数组,我会得到预期的结果:`permutations.push(array.join("")):

[ 'aab', 'aab', 'baa', 'aba', 'aba', 'baa' ]

我在这里错过了什么?我无法理解数组如何包含一个在被插入排列时突然改变的值。

为清楚起见,这是一个 freecodecamp 任务,我正在努力寻找非重复排列。

最佳答案

您正在使用相同的数组 变量,它始终引用相同的内存位置。因此,无论您在该数组中更改什么,都会独立于您是通过 array 还是通过 permutations 访问数组,后者的所有元素都设置为相同的数组引用。

您可以通过将数组的副本添加到排列 数组来解决这个问题,如下所示:

permutations.push(array.slice(0)); 

请注意,您拥有的数组 值由字符串组成。如果它们是您也修改过的可变对象,那么您将需要进一步扩展此解决方案。但在你的情况下,以上就足够了。

关于javascript - 意外值被插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35419532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com