我需要編寫一個代碼,該代碼獲取一個整數數組並返回一個數組,其中元素增加,如果是偶數,則減少,如果是奇數。 我嘗試使用過濾器和地圖JavaScript函數。這是代碼:過濾器和地圖在javascript中的奇怪行爲
var test=[2,5,8,13];
var my_function = (some_array) => some_array.filter((num,index,array) => num % 2 == 0 ? array[index]=num+1 : array[index]=num-1);
console.log(my_function(test));
console.log(test);
這個代碼打印[2,5,8,13] [3,4,9,12],而使用地圖 你有
var test=[2,5,8,13];
var my_function = (some_array) => some_array.map((num,index,array) => num % 2 == 0 ? array[index]=num+1 : array[index]=num-1);
console.log(my_function(test));
console.log(test);
這個代碼[3,4,9,12] [3,4,9,12]
正如您所看到的使用過濾器一樣,對象在映射時被克隆,對象被更改。 關於MDN的文檔說:
map()方法創建一個新數組,其結果是調用此數組中每個元素的提供函數的結果。
我是以錯誤的方式使用地圖和過濾器還是文檔錯誤? 我在Chrome和Firefox上測試了這種行爲。
其實我使用的是錯誤的地圖功能。這裏是固定的地圖代碼
var my_function = (some_array) => some_array.map((num) => num % 2 == 0 ? num+1 : num-1);
簡單明瞭!謝謝 :) – Antonio