[JS関数](Aray)の高次関数

8741 ワード

JS関数
高次関数
高次関数は英語でHigher-order functionと言います.高次関数は何ですか?
JavaScriptの関数は実はすべてある変数を指しています.変数が関数を指すことができるので、関数のパラメータが変数を受け取ることができます.この関数は高次関数と呼ばれます.
関数参照、オブジェクト参照、関数名というのは、メモリの中のアドレスです.このアドレスは、関数やオブジェクトや方法を指しています.このアドレスをもらった人は、関数を呼び出したり、メソッドを呼び出す権利を持っています.だから、着信関数というのは、パラメータとして、実はこのアドレスを別の関数に伝えています.もう一つの関数にこの関数を操作する権利を持たせます.
この部分は前に書いたことがないので、多くの理解が必要です.(array)の高次関数は主に以下の通りである.
  • map/reduce
  • filter
  • sort
  • every find Index forEachなどの
  • その中で、注意したいのは
  • map arr.map(String);このような使い方ですか?
  • sort数字arrayの比較には高次関数
  • が必要です.
    練習中に勉強しました.
  • 文字列は数字を回転して、ビットの運算のスピードの速いコードを使うのは少なくて、推薦します.負の16進数文字列を数値に変換する場合.まず、任意のものをStringに変換し(例えば、+”を通して)、その後、1元の演算子またはベースのパーrseIntを用いて、数値として解析するべきである.しかし、結果がNaNの数値ではない場合は、パーパーミッションを使ったほうがいいです.JavaScript文字列は数字の5種類の方法と落とし穴の原文converting-stings-to-number-javascript-pitfalls
  • を回転します.
  • stringの方法は、持っていることを覚えておいてください.でないと、エラーが発生します.JS文字列方法
  • 1.map/reduce
  • mapの使い方
  • .map()法によりJavaScriptのArayに定義されています.Arayのmap()方法を呼び出して、自分たちの関数を入力し、結果として新たなArayを伝えます.
  • 注意:map()が入ってくるパラメータはpowであり、関数オブジェクト自体である.例:
  • はmap()で平方
  • を求めます.
  • Arayのすべての数字を文字列に変換する:
  • //***************1*******************
            function pow(x) {
                return x * x;
            }
    
            var arr = [1, 23, 4];
            var res = arr.map(pow);
            console.log(res);
    //***************2*******************
            var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
            arr.map(String); // ['1', '2', '3', '4', '5', '6', '7', '8', '9']
    
    コードは一行だけ必要です.(・∀・(・∀・*)はSteringも関数対象ではないですよね?
  • reduceの使い方
  • は関数オブジェクトを受信し、この関数は2つのパラメータを受信して再帰的に実行しなければならない.
  • レデュースを利用して積を求める
  • フレックスを利用して配列を10進数
  • に変換する.
            // ***************reduce*****************
            // ***************1*****************  reduce       
            function product(arr) {
                return arr.reduce(function (x, y) {
                    return x * y;
                });
            }
    
            //   :
            if (product([1, 2, 3, 4]) === 24 && product([0, 1, 2]) === 0 && product([99, 88, 77, 66]) === 44274384) {
                console.log('    !');
            }
            else {
                console.log('    !');
            }
            //***************2*****************  reduce           
    
            function reduce(x, y) {
                return x * 10 + y;
            }
            var arr = [1, 3, 5, 7, 9];
            var res = arr.reduce(reduce);
            console.log(res);
    
  • 3つの練習
  • JavaScriptに内蔵されているパーrseInt()関数を使用しないでください.mapとreduceを利用してstring 2 int()関数
  • を実現します.
    // ***************  *****************
            //   :    JavaScript   parseInt()  ,  map reduce      string2int()  :
            function string2int(s) {
                // var res=+s;
                return +s;//          ,      map reduce
            }
    
            //   :
            if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
                if (string2int.toString().indexOf('parseInt') !== -1) {
                    console.log('    parseInt()!');
                } else if (string2int.toString().indexOf('Number') !== -1) {
                    console.log('    Number()!');
                } else {
                    console.log('    !');
                }
            }
            else {
                console.log('    !');
            }
    
  • ユーザーが入力した不正な英語名をはじめとする文字を大文字にしてください.他の小文字の標準名を入力してください.「'adam'、'LISA'、'barT'」、出力:''Adam'、'Lisa'、'Bart'」
  • .
            //                ,       ,         。  :['adam', 'LISA', 'barT'],  :['Adam', 'Lisa', 'Bart']。
    
            function normalize(arr) {
                var res = arr.map(rename);
                return res;
            }
    
            function rename(s) {
                s = s.toLowerCase();
                if (s.length !== 0) {
                    s = s[0].toUpperCase() + s.substring(1, s.length);//        toUpperCase()    
                }
                return s;
            }
    
            //   :
            if (normalize(['adam', 'LISA', 'barT']).toString() === ['Adam', 'Lisa', 'Bart'].toString()) {
                console.log('    !');
            }
            else {
                console.log('    !');
            }
    
  • 小明はmap()を利用して文字列を整数
  • にしたいです.
            //       map()        ,        :
    
            //      1, NaN, NaN,        ,            。
    
            //   :  Array.prototype.map()   。
            var arr = ['1', '2', '3'];
            var r;
            // r = arr.map(parseInt);
            r = arr.map(x => {
                return parseInt(x)
            });
            console.log(r);
    
    2.filter
    Arayのfilter()も一つの関数を受信します.map()とは違って、filter()は各要素に導入された関数を順次作用させて、戻り値によってtrueかfalseかによって、この要素を保留するかそれとも廃棄するかを決定します.filter()という高次関数で、正確にフィルタ関数を実現することが鍵となります.
  • コールバック関数filter()が受信したコールバック関数は、実際には複数のパラメータを持つことができます.通常は最初のパラメータのみを使用して、アラyの要素を表します.コールバック関数はまた、要素の位置と配列自体を表す他の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の重複要素を巧みに除去することができます.
            // array  
            var
                r,
                arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
            r = arr.filter(function (element, index, self) {
                return self.indexOf(element) === index;
            });
    
            console.log(r.toString());
    
  • 練習:FIlter()で素数を絞り出してみてください.(・∀・)(・∀・*)書いてあるのはarrですが、filter()で受信したコールバック関数の一番最初に入ったパラメータはアラyのある要素で、全体のarrayは3番目のパラメータです.
  • //  filter()     :
            function get_primes(arr) {
                //     arr,    filter()                Array     ,    array;  array      
                return arr.filter(function (element) {
                    //1          
                    if(element===1)
                        return false;
                    var i;
                    // 2  ,2   
                    for (i = 2; i < element; i++) {
                        if (element % i === 0) {
                            return false;
                        }
                    }
                    return true;
                });
            }
    
            //   :
            var
                x,
                r,
                arr = [];
            for (x = 1; x < 100; x++) {
                arr.push(x);
            }
            r = get_primes(arr);
            if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) {
                console.log('    !');
            } else {
                console.log('    : ' + r.toString());
            }
    
    3.sort
    sortメソッドは使用中ですが、デフォルトでは文字列のASCIIコードをソートします.メソッドは、デフォルトではすべての要素をStringに変換して並べ替えます.結果'10'は'2'の前に並べられています.文字'1'は文字'2'のASCIIコードより小さいので、並べ替えが必要な場合は、比較関数を受信してカスタムの並べ替えを行う必要があります.この比較関数は、取得値によって順序を決めるものです.(正、負、0)通常はコードによく書きます.Reference/Global Object/Aray/sort
    If compreFunction(a,b)is less than 0、sort a to a lower index than b、i.e.a cores first.If compreFnction(a,b)returns 0、leave a and b unchanged with th repectto aach other、but sorted wirted with thethererereretttttttttwith thethetherererererererererererererererererererererererererererereretttttttttststststststststststrerererererererererererererererererereredededededededededebrowsers(e.g.Mozila versions dating back to at least 2003)repectthis. If compreFunction(a,b)is greater than 0、sort b to a lower indetha.compreFunction(a,b)must alwaysturernthe the same vaververververververrererererererererererererererererereemens stststststaaaaaaaaaaaaaaaaaapapaparererereinininininininininininininininininininininininininininininininininininininininininininininininthe sort order is undefined.
    4.アラy
    配列に対しては、map()、reduce、filter()、sort()のような方法が一つの関数に入る以外にも、Arayオブジェクトは非常に実用的な高次関数を多く提供する.
  • everryeverry()方法は、配列の全ての要素が試験条件を満たしているかどうかを判断します.(・∀・(・∀・*)はfilterと似ていますが、everyはブール値を返し、filterはスクリーニングされたarrayを返します.
  • find find()メソッドは、条件に合致する最初の要素を検索するために使用され、見つかったら、この要素を返します.そうでなければ、undefinedを返します.
  • findIndex findIndex()とfind()は同様で、条件に合う最初の要素を検索するのです.違いは、findIndex()がこの要素のインデックスを返します.見つけられなかったら、-1
  • に戻ります.
  • forEach forEach()とmap()は同様で、各要素を順次に導入された関数に作用しますが、新しい配列には戻りません.forEach()は遍歴行列によく使われていますので、入力された関数は戻り値を必要としません.