JavaScript-高次関数(map、reduce、filter、sort)
2540 ワード
map
配列の各要素に対して二次的を求める
filterはまた、Arayのいくつかの要素をフィルタリングし、残りの要素を返すためによく使われています.
map()と同様にArayのfilter()も関数を受信する.map()とは違って、filter()は、導入された関数を各要素に順次作用させ、その戻り値がtrueかfalseかによって、保留かそれとも廃棄かを決定する.
例えば、一つのArayでは偶数を削除して奇数だけ残してもいいです.
コールバック関数
filter()受信のコールバック関数は、複数のパラメータがあります.通常は最初のパラメータのみを使用して、Arayのある要素を表します.コールバック関数はまた、要素の位置および配列自体を表す他の2つのパラメータを受信することができる.
ソフト
配列の各要素に対して二次的を求める
function pow(x) {
return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
配列に対して循環をするのに相当します.var f = function (x) {
return x * x;
};
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var result = [];
for (var i=0; i
reducearray.reduce(function(total, currentValue, currentIndex, arr), initialValue)
Arayのreduce()はこのArayの[x 1,x 2,x 3…]に関数を作用させ、この関数は二つのパラメータを受信しなければなりません.reduce()は結果を連続して次の要素と累積して計算します.その効果は:[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
和を求めるvar arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x + y;
}); // 25
filterfilterはまた、Arayのいくつかの要素をフィルタリングし、残りの要素を返すためによく使われています.
map()と同様にArayのfilter()も関数を受信する.map()とは違って、filter()は、導入された関数を各要素に順次作用させ、その戻り値がtrueかfalseかによって、保留かそれとも廃棄かを決定する.
例えば、一つのArayでは偶数を削除して奇数だけ残してもいいです.
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
r; // [1, 5, 9, 15]
Arayの空の文字列を削除します.このように書くことができます.var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function (s) {
return s && s.trim();
});
r; // ['A', 'B', 'C']
この高次関数はfilter()を用いて,正確にフィルタ関数を実現することが肝要である.コールバック関数
filter()受信のコールバック関数は、複数のパラメータがあります.通常は最初のパラメータのみを使用して、Arayのある要素を表します.コールバック関数はまた、要素の位置および配列自体を表す他の2つのパラメータを受信することができる.
var arr = ['A', 'B', 'C'];
var r = arr.filter(function (element, index, self) {
console.log(element); // 'A', 'B', 'C'
console.log(index); // 0, 1, 2
console.log(self); // self arr
return true;
});
filterを利用して、Arayの重複要素を巧みに除去することができます.var r,
arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
r = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
alert(r.toString());
重複要素の除去に依存するのはindexOfであり、常に最初の要素の位置に戻り、後続の重複要素の位置はindexOfの戻り位置と等しくないので、filterによってフィルタリングされた.ソフト
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
}); // [1, 2, 10, 20]