JavaScriptにおける高次関数の応用

1896 ワード

JSでは、関数の特殊なオブジェクトをtypeofで判断するとfunctionのオブジェクトです.変数に関数を与えることができます.この変数は他の変数にも渡されます.最後にこの関数はパラメータとして他の関数にも伝えられます.他の関数の戻り値としても使えます.
高次関数
他の関数を操作する関数(パラメータは関数または戻り値は関数)
典型例:JS中原生が持参する:Aray.prototype.map,Aray.prototype.filter,Aray.prototype.reduceなど
高次関数を内蔵する簡単な使用:
1、map()
まず、map()の戻り値は配列であり、動作も行列であるが、彼のパラメータは関数である.
各配列要素*2を操作する場合:
let arr1 = [1,2,3];
let arr2 = arr1.map(item => item * 2);
//arr2 = [2,4,6];
2、filter()
filter()法は新しい配列を作成します.ここにはすべての要素が含まれています.filter()に渡す方法のコールバック関数は、3つのパラメータ:element,indexおよびarrayを受け入れる.
let persons = [{name:'zhangsan',sex:'men'},{name:'lishi',sex:'men'},{name:'limei',sex:'women'}];
let womens = persons.filter(person => person.sex == 'women');
//womens = [{name:'limei',sex:'women'}];
3、deduce()
reduce方法は、呼び出し配列の各要素に対して、コールバック関数を実行し、最後に単一の値を生成して返します.reduce方法は、2つのパラメータを受け入れる.1)reducer関数、2)オプションのinitial Value.
reducer関数は4つのパラメータを受け入れます.accumurtor、currentValue、currentIndex、sourceAray.
initial Valueが提供されると、アキュムレータはinitial Valueに等しくなり、current Valueは配列の最初の要素に等しくなります.
initial Valueが提供されていない場合、アキュムレータは配列の最初の要素に等しくなり、currentValueは配列の中の第二の要素に等しくなります.
A
var arr= [1,2,3,4,56,6];
var sum = arr.reduce((sum1,currentValue) => sum1+currentValue);
//sum = 72;
B
var arr= ['tian','zhao','li'];
var arrs = arr.reduce((arrs,currentValue) => arrs+','+currentValue);

//arrs="tian,zhao,li";
4、どうやって脚本で高次関数を実現しますか?
文字列配列があると仮定して、各要素は元の配列中の文字列の長さを表します.
var arr = ['wwwwwww','qwe'];
function mapForEach(arr,fn){
    var newarr = [];
    for(let i = 0;i