Map と forEach の違いと関係

Map と forEach の違いと関係

1. 同じ点:

1. 都是循环遍历数组中的每一项

2. 每次执行匿名函数都支持三个参数,参数分别为item(当前每一项),index(索引值),arr(原数组)

3. 匿名函数中的this都是指向window

4. 只能遍历数组

2. 相違点:

1. map()会分配内存空间存储新数组并返回,forEach()不会返回数据。

2. forEach()允许callback更改原始数组的元素。map()返回新的数组。

3. 使用シナリオ:

1. forEach适合于你并不打算改变数据的时候。

2. map()适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。这样的优点在于你可以使用复合(composition)(map(), filter(), reduce()等组合使用)。

拡大

1. foreach()

戻り値はありません!
使用方法:
    arr[].forEach(function(value,index,array){
            xxxxx
    })
  • パラメータ: 値配列内の現在の項目、現在の項目のインデックス、および配列の元の配列。

  • 配列には複数の項目があるため、渡された匿名コールバック関数を数回実行する必要があります。

  • 理論上、このメソッドには戻り値がなく、配列内の各項目を走査するだけで、元の配列は変更されませんが、配列のインデックスを使用して元の配列を自分で変更できます。

      举个例子:
      var array = [1,3,5,9,7];  
      var res = array.forEach(function (item,index,input) {  
          input[index] = item*10;  
      })  
      console.log(res);//--> undefined;  
      console.log(array);//--> 通过数组索引改变了原数组; [10,30,50,90,70]
    

2.map()

戻り値がある場合は、それを返すことができます。
使用方法:
    arr[].map(function(value,index,array){
        xxx
        return xxx
    });
  • パラメータ: 値配列内の現在の項目、index 現在の項目のインデックス、array 元の配列。
  • 違い:map のコールバック関数は return 戻り値をサポートしており、返される内容は配列内のこの項目を何に変更するかに相当します (元の配列には影響しませんが、元の配列のクローンを作成するのと同じであり、クローンはこのコピーの配列内の対応する項目が変更されました);

例えば:

var array = [1,3,5,7,9];  
var res = array.map(function (item,index,input) {  
    return item*10;   
})  
console.log(res);//[10, 30, 50, 70, 90]
console.log(array);// [1, 3, 5, 7, 9] 不变

おすすめ

転載: blog.csdn.net/TC_DESpipi/article/details/128625829