簡體   English   中英

JavaScript forEach()

[英]JavaScript forEach()

在學習JavaScript中的forEach()方法時,我有幾個與之相關的問題。 目前,我已經編寫了以下代碼:

 var arr = [1,2,3,4,5,6];
 arr.forEach(function(elem, idx, arr){
     elem=elem*2;
 });

 alert(arr); // "1,2,3,4,5,6"

我的目標是將arr中的每個元素簡單地乘以2,但是當我使用alert檢查最終值時,arr中的值似乎沒有被修改。 這是什么問題

另外,對於forEach函數采用的3個參數,我有些困惑。 首先,是否需要傳遞3個參數? 如果一個人不提供確切的3個參數,將會發生什么? 我看過的一些教程似乎只提供了一個參數,但解釋不清楚。 其次,參數名稱是否重要(例如e,elem或element)?

謝謝。

陣列未修改,因為您未修改它。 為此,請按以下方式更新代碼。

var arr = [1,2,3,4,5,6];
arr.forEach(function(elem, idx, arr){
  arr[idx] = elem*2
});

console.log(arr);

如果您檢查控制台,則會看到更新的arr。

  1. 您不能通過返回新值或更改elem來就地編輯數組。 但是,您可以使用idx變量,例如arr[idx] = elem * 3或使用map函數。
  2. 您可以省略不需要的參數
  3. 你可以隨便命名

對於第一個問題,只需使用map

 var arr = [1,2,3,4,5,6];
 arr = arr.map(function(elem){
     return elem*2;
 });

 alert(arr); // "2,4,6,8,10,12"

arguments是可選的,名稱完全沒有關系。

你的方法

除了elem ,您沒有為其他任何東西分配新值,這僅在回調的范圍內。 修改您的代碼,以便將elem * 2分配給arr[idx] 工作示例:

 var arr = [1, 2, 3, 4, 5, 6]; arr.forEach(function(elem, idx) { arr[idx] = elem * 2; }); document.body.textContent = arr; 


更好的方法

但是對於類似的任務,您應該使用map

 var arr = [1, 2, 3, 4, 5, 6]; arr = arr.map(function(num) { return num * 2; }); document.body.textContent = arr; 

參數是可選的。

idx使您知道當前正在評估的數組元素的索引。

arr,是您要評估的數組。

所以elem == arr [idx]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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