我有,我相信是,奇怪的行爲,同時嘗試推入陣列。輸出數組時,我會看到預期值。如果我推入陣列然後輸出,我會得到重複的值。有問題的代碼:意外的價值被推到陣列
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', 'b'],[ '一個', 'A',' b'],['a','a','b'],['a','a','b'],['a','a','b'],['a' ','a','b']]
我得到預期的結果,如果我加入陣列,而將其推到排列:`permutations.push(array.join( 「」)):
[ 'AAB', 'AAB' '咩', 'ABA', 'ABA', '咩']
我缺少什麼嗎?我無法理解數組如何能夠包含一個在推入排列時突然發生變化的值。
爲了清楚起見,這是一個freecodecamp任務,我正在努力尋找不重複的排列。
因爲你一遍又一遍地推着相同的數組。如果您想要數組的快照,請推送您之後永遠不會更改的副本。 –
我確定我在這裏很密集,但是:我明白你在說什麼,但我不明白我是怎麼做到的。我所看到的是我推動排列組合。如果數組是「這是一個字符串」,並在下一次「這也是一個字符串」當然排列將最終成爲:[「這是一個字符串」,這也是一個字符串「]等等? –
數組是引用類型,你正在向同一個數組推送多個引用 –