jsメモ:filter()、forEach()、map()、reduce()、reduceRight()の違い
7889 ワード
一、簡単に述べる
ECMAScript 5は配列に対して5つの反復法を定義する.各メソッドには、各項目で実行する関数と(オプション)関数を実行する役割ドメインオブジェクトの2つのパラメータが受信されます.これらのメソッドに入力された関数は、配列アイテムの値、配列内のアイテムの位置、配列オブジェクト自体の3つのパラメータを受信します.使用する方法によっては、この関数の実行後の戻り値がアクセスの戻り値に影響を与えない場合があります.以下に,この5つの反復法の役割を示す.
パラメータは同じです.
二、区別
filter()、forEach()、map()、some()、every()は、配列の各呼び出し関数を処理します.
filter()、forEach()、map()、some()、every()を使用しても、元の配列は変更されません.
次に本題に入り、filter()、forEach()、map()の違いを例で区別します.
var arr = [1,2,3,4];
var my = arr.filter(function(item,index,arr){
return item*2 > 2;
});
console.log(my); //[2, 3, 4] // filter true
console.log(arr); //[1, 2, 3, 4]
var arr = [1,2,3,4];
var my = arr.filter(function(item,index,arr){
return item*2;
});
console.log(my); //[1, 2, 3, 4] // true
console.log(arr); //[1, 2, 3, 4]
var arr = [1,2,3,4];
var my = arr.forEach(function(item,index,arr){
return item*2;
});
console.log(my); //undefined // forEach
console.log(arr); //[1, 2, 3, 4]
var arr = [1,2,3,4];
var my = arr.map(function(item,index,arr){
return item*2;
});
console.log(my); //[2, 4, 6, 8]
console.log(arr); //[1, 2, 3, 4]
三、forEach()とmap()
forEach()とmap()の違いを詳しく説明します.map()はメモリ領域を割り当てて新しい配列を格納して返し、forEach()はデータを返しませんが、元の配列を変更できます.
1、forEach()forEachは、データを変更しようとしないときに適しています.他の変数に保存したり印刷したりするなど、データで何かをしたいだけです.
let arr = ['a', 'b', 'c', 'd'];
arr.forEach((letter) => {
console.log(letter);
});
// a
// b
// c
// d
もちろんforEachは元の配列を変更することもできます.
var arr = [1,2,3,4,5];
arr.forEach((num, index) => {
return arr[index] = num * 2;
});
console.log(arr) //[2, 4, 6, 8, 10]
2、map()map()は、データ値を変更するときに、新しい配列を返すのに適しています.このような利点は、複合(composition)(map()、filter()、reduce()などを組み合わせて使用することで、より多くの模様を遊ぶことができることです.
let arr = [1, 2, 3, 4, 5];
let arr2 = arr.map(num => num * 2).filter(num => num > 5);
console.log(arr2) // [6, 8, 10]
四、reduce()、reduceRight()
配列には、reduce()、reduceRight()reduce()メソッドが左から右に配列を巡回する2つの集計方法があります.一方、reduceRight()は右から左に配列を巡回します.
reduce()、reduceRight()のパラメータは同じです.
の関数です.集計のために、配列の最初の項目と2番目の項目を最初の遍歴とします.(すなわち、配列にn個の要素がある場合、reduce()またはreduceRight()を呼び出してn-1回遍歴する)分からない場合は、次の例を参照してください.例1:
var a = [1,2,3].reduce(function(prev,item,key,array){
console.log(9); // 9
return prev+item;
});
console.log(a);//6
出力:9 9 9 6
何が起こったかを見てみましょう.まず最初の集計を行います.配列の第1項と第2項を加算し(すなわち1+2)、結果3を関数の第1パラメータとして次の項に渡します.次に2回目の集計を行います:3+3で、最終的に6を返します.その間に2回の集計が行うため、出力6の前に2回出力.
もしこの配列が1つか空の配列しかなかったら?下を見てみましょう
例2:
var a = [1].reduce(function(prev,item,key,array){
console.log(2); //
return prev+item;
});
console.log(a);//1
// ,
出力:1
2を印刷せず、1を直接出力し、reduceの関数が実行されていないことを示し、元の配列を直接返します.この配列が空の場合、reduce()またはreduceRight()を呼び出すと直接エラーが報告されるため、
は空では処理されません.