[英]How to add text to end of each array element using map?
我正在嘗試編寫一個映射到數組的函數,並將文本字符串添加到數組中每個元素的末尾。 當我執行console.log時,我只是undefined
。 任何幫助將不勝感激。
這是數組:
let arr = ["England","Scotland","Westeros"];
這是我正在嘗試的:
dragonMapper = (arr) => {
let newArr = arr.map(function(e) {
e += '...here be dragons'
});
return newArr;
}
console.log(dragonMapper(newArr));
這是我希望函數執行后的數組:
["England...here be dragons","Scotland...here be dragons","Westeros...here be dragons"];
.map
的回調函數需要返回值
let arr = ["England", "Scotland", "Westeros"]; dragonMapper = arr => { let newArr = arr.map(function(e) { return e + '...here be dragons'; //Return the concatenated value of 2 strings }); return newArr; } console.log(dragonMapper(arr));
較短的版本,帶有箭頭函數語法:
let arr = ["England", "Scotland", "Westeros"]; dragonMapper = arr => { return arr.map(e => e + '...here be dragons'); } console.log(dragonMapper(arr));
代替e += '...here be dragons'
您可以簡單地執行e + '...here be dragons'
並返回新值。
另外,您正在使用newArr
調用dragonMapper
,但需要使用arr
調用它
let arr = ["England", "Scotland", "Westeros"]; dragonMapper = (arr) => { return arr.map(function(e) { return e + '...here be dragons' }); } console.log(dragonMapper(arr));
正如其他人所說,您可以使用以下代碼解決此問題:
let arr = ["England","Scotland","Westeros"]; let dragonLands = arr.map(country => country + '...here be dragons'); console.log(dragonLands);
同樣重要的是要了解代碼為什么會失敗。 問題是字符串是不可變的。 所以這:
e += '...here be dragons'
不會更改原始數組中e
的值,而是返回一個新的String,該字符串立即被丟棄,因為您沒有將其分配給某些東西或未將其返回。
可能會造成混淆,因為這看起來非常相似:
let arr = [ {name: "England", id: 1}, {name: "Scotland", id: 2}, {name: "Westeros", id: 3} ]; arr.forEach(country => country.name += '...here be dragons'); console.log(arr);
但是有重要的區別。 首先, map
返回將函數應用於元素的結果。 相比之下, forEach
僅對副作用很重要,在這種情況下,使提供給它的元素發生變異。
其次, country => country.name += '...here there be dragons'
做兩件事。 它會像您的版本一樣創建一個新的String,然后將其分配回country.name
。 對象不是一成不變的。
map
是一個非常有用的構造,但是在使用它時,必須了解它是調用的函數的結果非常重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.