配列でよく使われるAPIの詳細とテクニックに関するメモ(一)

11296 ワード

1.配列のスタックとスタックの特性
◆インスタックpush()は、複数のパラメータを一度に入れることができ、内部はargument擬似配列を遍歴して格納され、pushメソッドを使用してデータを配列の最後尾に格納し、格納した後に現在の配列の長さを返し、アウトスタックpop()は配列の最後尾から1つの配列要素を取り出して返すことができるが、この配列要素を元の配列から削除することもできる.
◆キューに入るunshift()は一度に複数のパラメータを入れることができ、要素を配列の一番前に保存し、保存すると配列の長さを返し、キューを出るshift()は配列の一番前の要素から戻ることができますが、この取り出した配列要素を元の配列から削除することもできます.

    //      
    var arr=["  ","  ","  ","  ","  ","  "];
    console.log(arr);

    //            

        arr.push("   ");//                    arr[arr.length-1]="    "  (       )
        console.log(arr);//   
        var name=arr.pop();//               
        console.log(name);//    
        console.log(arr);//   

    //              

        arr.unshift("   ");//                   (       )
        console.log(arr);//   
        name=arr.shift();//                     arr[0]
        console.log(name);//    
        console.log(arr);//   





2.配列に付属する反転と並べ替え特性
◆配列のreverse()は,内部ではforループが前後の配列要素交換を遍歴し,元の配列に影響を及ぼす.◆配列のsort()は、内部でデフォルトで使用されるソート方法は、アルファベットのunicodeコード、すなわちascllコードテーブルのascllコードを比較することで、ルールや動作を伝達することでソートルールを変更することができます.
arr7.sort(function (a, b) {
return a-b;//は2つの数の減算値を返し、a-bであれば小さいから大きいへの昇順、逆にb-aは大きいから小さいへの降順である
 })
】sort法の内部ではやはり泡ソートが用いられる.


    ////     ,    \\\\
        console.log(arr);//["  ", "  ", "  ", "  ", "  ", "  "]
        var arr2 = arr.reverse();
        console.log(arr2);//["  ", "  ", "  ", "  ", "  ", "  "]
        //    
        console.log(arr.reverse());//["  ", "  ", "  ", "  ", "  ", "  "]


    ////        ,    \\\\

        var arr3 = [6, 3, 2, 1, 5, 8, 7, 9];
        //      
        console.log(arr3.sort());//[1, 2, 3, 5, 6, 7, 8, 9]
        console.log(arr3);//[1, 2, 3, 5, 6, 7, 8, 9]

        //                     
        console.log(arr3.reverse());
        console.log(arr3);

        //   sort                    unicode                 unicode    unicode       ascll 
        var arr4 = [11, 2, 1, 3, 5, 211, 56, 11, 56, 13, 15, 26, 2, 7, 8, 6, 9];
        console.log(arr4.sort());//[1, 11, 11, 13, 15, 2, 2, 211, 26, 3, 5, 56, 56, 6, 7, 8, 9]
        var arr5 = ['c', 'b', 'cc', 'ba', 'ca', 'd', 'e', 'f'];
        console.log(arr5.sort());//["b", "ba", "c", "ca", "cc", "d", "e", "f"]

        //        sort                     
        var arr6 = [11, 12, 5, 26, 8, 13, 7, 22, 33, 4];
        console.log(arr6.sort(function (a, b) {
            return a - b;//      
            return b - a;//      
        }));//[4, 5, 7, 8, 11, 12, 13, 22, 26, 33]

        var arr7 = ['c', 'cc', 'ba', 'b', 'd', 'e', 'f'];
        for (var i = 0; i < arr7.length; i++) {
            console.log(arr7[i] + ":" + arr7[i].charCodeAt());
        }
        console.log(arr7.sort(function (a, b) {
            return a.charCodeAt() - b.charCodeAt();//charCodeAt()       ASCLL  ascll 
        }))//["ba", "b", "c", "cc", "d", "e", "f"]

        //sort                 
        var array=[];
        function bubbleSort(fn){ //
            //       
            for(var i=0;i<array.length-1;i++){
                //    
                var flag=true;
                //       
                for(var j=0;i<array.length-1-i;j++){
                    //         
                    if(fn(array[j],array[j+1])>0){
                        var temp=array[j];
                        array[j]=array[j+1];
                        array[j+1]=temp;
                    }
                      //         
//                    if(array[j] - array[j+1] > 0){
//                        var temp=array[j];
//                        array[j]=array[j+1];
//                        array[j+1]=temp;
//                    }
                }
            }
        }
3.文字列のcharCodeAt()メソッドは、この文字列の先頭文字のascllコード、「a」を返すことができる.charCodeAt()//97
4.配列の共通API(機能方法)の特性
◆接続と分割切り取りと切り取り置換
◇配列の接続はconcatメソッドを使用しており、元の配列は影響を受けず、var newArr=arr.concat(arr 2);戻り値は新しい配列です.
◇配列の切り取り(分割)はsliceメソッドを使用しており、元の配列は影響を受けず、var newArr=arr.slice(2,4);//方法の第1のパラメータは開始インデックスを表し、第2のパラメータは終了インデックスを表し、内部ではforループを使用し、var i=2である.i<4であるため、左括弧の数字を含むが右括弧の数字を含まない.メソッドが1つのパラメータのみを渡す場合、2番目のパラメータ値は配列のlength-1にデフォルト設定され、パラメータの値が負数の場合、メソッド内部で変換され、配列のlength+パラメータ値(パラメータ値が負)に変換され、注意点は、第1のパラメータが第2のパラメータより大きい場合、内部ではforループ、例えばi=4、i<2が使用されているため、空の配列が返されることである.
◇配列の切り取り置換(切り取り)はspliceメソッドを使用しており、元の配列を切り取って新しい配列を返すため、var newArr=arr.splice(2,4);//////メソッドの最初のパラメータは、開始インデックスを表し、2番目のパラメータは、カットの長さを表し、カットの長さが配列の長さより大きい場合は、デフォルトは開始インデックスから末尾まで切り取られ、カットの長さが負の場合は、デフォルトの1つも切り取らずに空のグループに戻り、インデックスが負の場合は、デフォルト値は配列length+最初のパラメータです.(パラメータ字は負)、var newArr=arr.splice(2,4、「呂布」、「趙雲」、「関羽」)であり、前の2つのパラメータを除き、後のパラメータ値はいずれも元の配列が切り取られた位置にこれらのパラメータ値が挿入されることを示す.
        ◇

    var arr1 = ['a', 'b', 'c'];
    var arr2 = [1, 2, 3];

    //      concat          
    var arr3=arr1.concat(arr2);
    console.log(arr1);//['a', 'b', 'c']
    console.log(arr2);//[1, 2, 3]
    console.log(arr3);// ["a", "b", "c", 1, 2, 3]

    //     (  ) slice          
    var arr4=arr3.slice(2,4);//        2       4         
    var arr5=arr3.slice(2);//        2          
    var arr6=arr3.slice(-2);//             length-2         
    var arr7=arr3.slice(4,2);//            for          var i=4        i<2;   i   2              
    console.log(arr3);// ["a", "b", "c", 1, 2, 3]
    console.log(arr4);//["c", 1]
    console.log(arr5);//["c", 1, 2, 3]
    console.log(arr6);//[2, 3]
    console.log(arr7);//[]

    //       (  )splice            
    var arr8=[1,2,3,4,5];
    var arr10=arr8.splice(1,2);//   1           
    console.log(arr8);// [1, 4, 5]
    console.log(arr10);//[2, 3]

    var arr8=[1,2,3,4,5];
    var arr9=["  ","  ","  ","  ","  "];
    var arr10=arr8.splice(1,2,arr9);//   1                                  
    console.log(arr8);//[1, "  ", "  ", "  ", 4, 5]
    console.log(arr9);//["  ", "  ", "  ", "  ", "  "]
    console.log(arr10);// [2, 3]



◆配列要素インデックスを前または後から取得する
◇配列のindexOfメソッドは、配列要素に基づいてその配列要素のインデックスを下付きで検索し、前後から検索すると、見つからないと-1、arr.indexOf(「a」)を返します.
◇配列のlastIndexOfメソッドは、配列要素に基づいてその配列要素のインデックスを下付きで探し、後ろから先へ探すと見つからないと-1、arr.lastIndexOf("a")を返します.
        ◇

    var arr=['a','b','c','v','a','b'];

    //                                       -1  
    var index=arr.indexOf("a");
    var notIndex=arr.indexOf('x');//      x              -1
    ///                       
    var lastIndex=arr.lastIndexOf("a");

    console.log(index);//0
    console.log(notIndex);//-1
    console.log(lastIndex);//4


◆あらゆる遍歴方法
◇配列のevery()メソッドは、この配列の値がすべて規則に合致しているかどうかをループチェックするために使用されます.falseを返すたびに、falseが不一致であることの検出を終了します.
◇配列のfilter()メソッドこの配列の値がルールに合っているかどうかをループフィルタリングするにはtrueに戻った配列要素を新しい配列に入れ、falseに戻った配列要素は新しい配列に入れません.
◇配列のforEach()メソッドは、配列内の各要素をループするために使用され、デフォルトでundefinedが返される戻り値はありません.
◇配列のmap()メソッドは、配列内の各要素の値をループして変更し、変更後の配列を返します.
◇配列のsome()メソッドこの配列の値が規則に合致しているかどうかをループチェックするためにtrueを1回返すと検出が終了します戻りtrueはeveryとは反対にeveryはすべて合格ですsomeは1つだけ合格します
        ◇

    var arr=[1,2,5,1,2,5,3,6,21];

    //    every()                                  false          false    
        var arr=[1,2,5,1,2,5,3,6,21];
        var flag=arr.every(function(element,index,array){
            if(element>6){
                console.warn(element+"  6");
                return false;
            }
            return true;
        });
        console.log(flag);//false

    //   filter()                              true                    false                
        var newArr=arr.filter(function(element,index,array){
            if(element>6){
                return false;
            }
            return true;
        });
        console.log(arr);//[1, 2, 5, 1, 2, 5, 3, 6, 21]
        console.log(newArr);//[1, 2, 5, 1, 2, 5, 3, 6]

    //   forEach()                 ,            undefined
        var str="";
        var flag=arr.forEach(function(element,index,array){
            str+=element;
        });
        console.log(str);//1251253621
        console.log(flag);//undefined

    //   map()                                 
        var arr2=["  ","  ","  ","  "];
        var newArr2=arr2.map(function(element,index,array){
            return element+"  ";
        });
        console.log(arr2);//["  ", "  ", "  ", "  "]
        console.log(newArr2);//["    ", "    ", "    ", "    "]

    //   some()                                true          true    every   every       some      
        var flag=arr.some(function(element,index,array){
            if(element>6){
                console.warn(element+"  6");
                return true;
            }
            return false;
        });
        console.log(flag);//true



5.配列をクリア
◆arr.splice(0);元の配列を前から切り取った後、元の配列が空になります
◆arr.length=0;元の配列の長さが0で元の配列が空になる
◆arr=[]またはarr=new Array();元の配列が再び割り当てられ、元の配列が空になります

    var arr=[5,3,5,6];
        //      splice()               
        console.log(arr);//[5, 3, 5, 6]
        arr.splice(0);//   0          
        console.log(arr);//[]


    //         
        var arr=[5,3,5,6];
        console.log(arr);//[5, 3, 5, 6]
        arr.length=0;
        console.log(arr);//[]


    //                  arr=new Array();    
        var arr=[5,3,5,6];
        console.log(arr);//[5, 3, 5, 6]
        arr=[];
        console.log(arr);//[]



6.配列内の重複を消去
◆配列のforEachメソッドを用いて新しい配列のindexOfとlastIndexOfメソッドを組み合わせる
◆配列のforEachメソッドを用いて新しい配列のsomeメソッドを組み合わせる
◆forループと現在の配列を用いたindexOfとlastIndexOfメソッド
◆forループを用いて新しい配列のindexOfとlastIndexOfを組み合わせる方法

    var arr=[5,56,2,"a","c","v","s","a","c","v","a",7,11,5,165,651];
    var newArr=[];
    console.log(arr);
         forEach         indexOf lastIndexOf  
   arr.forEach(function(element,index,array){
       if(   ! (newArr.indexOf(element) !== -1 &&
               newArr.indexOf(element) === newArr.lastIndexOf(element)
               )
         ){
           newArr[newArr.length]=element;
       }
   });

    //     forEach          some  
   arr.forEach(function(element,index,array){
       if(
              ! newArr.some(function (element2,index2,array2) {
           if(element2==element){
               return true;
           }
           return false;
       })
       )
       {
           newArr[newArr.length]=element;
       }
   });

    //     forEach          indexOf lastIndexOf  
    for(var i=0;i<arr.length;i++){
        if(
                arr.indexOf(arr[i]) !== arr.lastIndexOf(arr[i])
        ){
            arr.splice(i,1);
            i--;
        }
    }
    console.log(arr);

    //     forEach          indexOf lastIndexOf  
   for(var i=0;i<arr.length;i++){
       if(     newArr.indexOf(arr[i]) !== -1 &&
               newArr.indexOf(arr[i]) === newArr.lastIndexOf(arr[i])
       ){
           continue;
       }
       newArr[newArr.length]=arr[i];
   }
   console.log(newArr);

転載先:https://www.cnblogs.com/jwlLWJ2018/p/9247746.html