js配列の高次関数

3643 ワード

1、forEach(遍歴)
forEach()メソッドは、配列の各要素を呼び出し、要素をコールバック関数に伝達するために使用されます.(戻り値なしで、行列が巡回されます)
注意: forEach()は、空配列に対しては、コールバック関数を実行しません.
コールバック関数パラメータ:currentValue 必要です.現在の要素; index オプション.現在の要素の索引値; アール オプション.現在の要素が属する配列オブジェクトです.
2、filter(フィルタリングして、新しい配列に戻ります.)
filter()法は新しい配列を作成し、新しい配列の要素は指定された配列中の条件に合致するすべての要素を検査することによって構成されます.
注意: filter()は空配列を検出しません.
注意: filter()は元の配列を変えません.
コールバック関数パラメータ:currentValue  必要です.現在の要素; index オプション.現在の要素の索引値; アール  オプション.現在の要素が属する配列オブジェクトです.
var ages = [32, 33, 16, 40];
console.log(ages.filter(function(item){
	return item > 18;	//             
}))
//  [32,33,40]
3、map(マッピングして、新しい配列を返します.)
map()メソッドは新しい配列を返します.配列の要素は元の配列要素の関数処理後の値を呼び出します.
map()メソッドは、元の配列要素の順に要素を順次処理します.
注意: map()は空の配列を検出しません.
注意: map()は元の配列を変更しません.
コールバック関数パラメータ:currentValue  必要です.現在の要素; index オプション.現在の要素の索引値; アール  オプション.現在の要素が属する配列オブジェクトです.
var numbers = [65, 44, 12, 4];
console.log(numbers.map(function(item){
	return item * 10;
}))
//  [650,440,120,40]
es 5を使って手動で実現してください.
(function(){
    function myMap(cb, obj){
    	// map()          
    	if(this.length == 0) return;
        //      ,          
    	var _this = this.slice();
        var arr = [];
        //         ,       
        obj ? null : obj = window;
    	for(var i=0; i<_this.length i="" arr.push="" _this="" return="" arr="" array.prototype.mymap="myMap;"/>
4、some(条件に合う要素が含まれているかどうかを判断し、ブール値を返します.)
some()メソッドは、配列内の要素が指定条件(関数提供)を満たすかどうかを検出するために使用されます.
some()メソッドは、配列の各要素を順次実行します.
条件を満たす要素がある場合、式はtrueを返します. , 残りの要素は再検出されません.条件を満たす要素がない場合は、falseを返します.注意: some()は空配列を検出しません.
注意: some()は元の配列を変えません.
コールバック関数パラメータ:currentValue  必要です.現在の要素; index オプション.現在の要素の索引値; アール  オプション.現在の要素が属する配列オブジェクトです.
var ages = [3, 10, 18, 20];
console.log(ages.some(function(item){
	return item > 28;
}))
//  false
5、every(全ての要素が条件に合っているかどうかを判断し、ブール値に戻ります.)
everry()メソッドは、配列のすべての要素が指定された条件に一致するかどうかを検出するために使用されます.
every()メソッドは、指定された関数を使用して、配列内のすべての要素を検出します.
配列内の要素が満たされていないことが検出された場合、式全体が返されます. false ,また、残りの要素は再検出されません.すべての要素が条件を満たすと、trueに戻ります.注意: every()は空配列を検出しません.
注意: every()は元の配列を変更しません.
コールバック関数パラメータ:currentValue  必要です.現在の要素; index オプション.現在の要素の索引値; アール  オプション.現在の要素が属する配列オブジェクトです.
var ages = [32, 33, 16, 40];
console.log(ages.every(function(item){
	return item > 18;
}))
//  false
6、reduce(アキュムレス)
reduce()メソッドは、アキュムレータとして関数を受信し、配列内の各値(左から右へ)は縮小され、最終的には1つの値として計算される.
reduce()は関数のcomposeとして高次関数として利用できる.
注意: reduce()は、空配列に対しては、コールバック関数を実行しません.
コールバック関数パラメータ:total 必要です.初期値、または終了後の戻り値を計算します. current Value  必要です.現在の要素; index オプション.現在の要素の索引値; アール  オプション.現在の要素が属する配列オブジェクトです.
var arr = [{price:30,count:2},{price:40,count:3},{price:50,count:5}];
//               
var sum = arr.reduce(function(x,y){
	return x.price*x.count + y.price*y.count;
})
console.log(sum)
//  NaN
//     
var sum = arr.reduce(function(x,y){
	return x + y.price*y.count;
},0)
console.log(sum)
//  430
es 5を使って手動で実現してください.
(function(){
    function myReduce(cb, initValue){
    	//         
    	if(this.length == 0) return;
        //      ,          
        var arr = this.slice();
        var startIndex = 1;
        //         ,     0    ,  initValue = arr[0]    1    
        initValue ? startIndex = 0 : initValue = arr[0];
        for(var i=startIndex; i