簡體   English   中英

如何使用map在每個數組元素的末尾添加文本?

[英]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)); 

您可以使用.map()方法和模板文字來實現

 let arr = ["England","Scotland","Westeros"]; let result = arr.map(country => `${country}...here be dragons`); console.log(result); 

代替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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM