我正在創建一個基本算法來查找字符串中最長的單詞。然而,我遇到了一個問題,其中兩個數組賦予不同的變量顯示爲相等。這裏是我的代碼:Javascript變量相互影響
function LongestWord(sen) {
var arr = sen.split(' '); // arr = ['How', 'is', 'your', 'dinner']
var wordsLength = arr.map(function(word) { // wordsLength = [3, 2, 4, 6]
return word.length;
});
var sortLength = wordsLength.sort(function(a, b) { //sortLength = [6, 4, 3, 2]
return b - a;
});
console.log(wordsLength === sortLength);
}
LongestWord("How is your dinner");
我評論我的預期每個陣列中的代碼相同。然而不知何故wordsLength
正在被排序,甚至在sortLength
var甚至被聲明。我知道這是因爲控制檯記錄"TRUE"
。我認爲地圖可能以某種方式自動對變量進行排序,但是當我註釋掉sortLength
時,wordsLength
未按我原先的預期排序。 很明顯,第二個變量聲明影響第一個,但我不知道爲什麼。我不知道任何導致此行爲的概念。
爲** [Array.prototype.sort()](參見https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects文檔/陣列/排序)**。 >>> sort()方法對數組中的元素進行排序並返回數組。意味着正在排序的當前數組被修改並返回。 – jherax
JavaScript中的對象和數組通過引用傳遞,因此在您的代碼中wordsLength和sortLength指向相同的數組,因此它們將獲取最後修改的值。 – dexhering
你究竟想要得到什麼結果,最長的單詞的長度還是最長的單詞本身? – Teemu