「JavaScript権威ガイド第六版」学習ノート-配列

18243 ワード

第七章、行列
  • 配列は値のセットである.
  • JavaScript配列は無タイプの
  • である.
  • JavaScript配列は、動的な
  • である.
  • JavaScript配列はまばらな
  • である.
  • 配列は、Aray.prototypeから属性
  • を継承する.
    行列の作成
    1.配列の直接量
    var empty = [];    //       
    var primes = [2,3,4,5,6];       // 5      
    var misc = [1.1,true,"a", ];    //3              
    (1)配列の直接量の中の値が必ずしも定数であるとは限らない.これらは任意の表現です.
    var base = 1024;
    var table = [base,base+1,base+2,base+3];
    (2)オブジェクトの直接量または他の配列の直接量を含むことができます.
    var b = [[1,{x:1,y:2}],[2,{x:3,y:4}]];
    (3)配列の直接量のいずれかの値を省略すると、省略された要素はundefined値に与えられます.
    var count = [1,,3];   //   3   ,         undefined
    var undefs = [,,];   //   2   ,  undefined
    (4).配列の直接量の文法は、任意の末尾のコンマがあることができます.したがって、[,]は2つの要素だけで、3つではありません.
    2.構造関数Aray()
    (1)起動時にパラメータがない
    var a = new Array();
    (2)呼び出し時に数値パラメータがあり、長さを指定します.
    var a = new Array(10);
    (3)2つ以上の配列要素または配列を指定する非配列要素を表示します.
    var a = new Array(5,4,3,2,1,"testing,testing");
    配列要素の読みと書き
    1.配列の参照は、大かっこの左側にあります.四角いかっこは、負の整数でない値を返す任意の表現です.
    var a = ["world"];  //          
    var value = a[0];  //  0   
    a[1] = 3.14;   //  1   
    i = 2;  
    a[i] = 3;  //  2   
    a[i + 1] = "hello";   //  3   
    a[a[i]] = a[0];   //  0   2   ,  3   
    2.配列はオブジェクトの特殊な形式です.
    o = {};    
    o[1] = "one";    //          
    3.負または非整数を使用してインデックス配列を作成できます.数値は文字列に変換され、文字列は属性として名来で使用されます.
    a[-1.23] = true;  //        "-1.23"   
    a["1000"] = 0;   //      1001   
    a[1.000];  // a[1]  
    4.配列はオブジェクトで、それらは原型から要素を受け継ぐことができます.
    まばら行列
    1.疎配列とは、0から始まる不連続インデックスを含む配列です.
    2.配列のlength属性値は、配列中の要素の個数を表します.
    3.配列がまばらな場合、length属性値は要素の個数より大きい.
    a = new Array(5);  //      ,  a.length 5
    a = [];  //       ,length = 0
    a[1000] = 0;  //        ,    length 1001
    
    var a1 = [,,,];   //   [unfefined,unfefined,unfefined]
    var a2 = new Array(3);  //         
    0 in a1;  //=>true:a1   0      
    0 in a2;  //=>false:a2   0     
    配列長
    1.各配列にはlength属性があります.
    [].length;  //=>0:      
    ['a','b','c'].length;  //=>3:      2,length 3
    2.配列がまばらな場合、length属性値は要素の個数より大きい.
    3.length属性が現在の長さより小さい負の整数nである場合、現在の配列のインデックス値がn以上の要素は削除されます.
    a = [1,2,3,4,5];  // 5        
    a.length = 3; //  a [1,2,3]
    a.length = 0; //       ,a []
    a.length = 5;  //   5,      ,  new Array(5)
    4.配列のlength属性値を現在の長さよりも大きく設定します.実際にはこれは配列に新しい要素を追加しません.配列の最後に空の領域を作成するだけです.
    5.Object.defineProperty()で配列のlength属性を読み取り専用にすることができます.
    a = [1,2,3];  // 3        
    Object.defineProperty(a,"length",{
        writable:false       // length    
        })
    a.length = 0;  //a    
    配列要素の追加と削除
    1.新しい索引に値を割り当てます.
    a = [];   //        
    a[0] = "zero";   //         
    a[1] = "one";
    2.push()は配列の最後に1つ以上の要素を追加します.
    a = [];  //        
    a.push("zero");  //         。a = ["zero"]
    a.push("one","two");  //       。a = ["zero","one","two"]
    3.unshift()は、配列のヘッダに要素を挿入し、他の要素をより高いインデックスに順次移動させる.
    4.オブジェクト属性を削除するようにdelete演算子を使って配列要素を削除することができます.
    a = [1,2,3];
    delete a[1];  //a   1        
    1 in a;  //=>false:    1        
    a.length;  //=>3:delete          
    5.splice()は配列要素を削除または置換する一般的な方法です.
    配列巡回
    1.for()サイクル
    var keys = Object.keys(o);  //  o          
    var values = [];   //            
    for(var i=0;i
    (1).配列の長さは、ループごとに検索するのではなく、一度だけ検索するべきです.
    for(var i = 0,len = keys.length;i < len;i++){
        //       
    }
    (2)配列要素を使用する前に、まずそれらを検出します.null、undefinedと存在しない要素を排除したいならば
    for(var i=0;iif(!a[i]){
            continue; //  null,undefined       
        }
        //   
    }
    (3).undefinedと存在しない要素だけをスキップしたい場合
    for(var i =0;i < a.length;i++){
        if(a[i] === undefined){
            continue;   //  undefined +      
        }
    }
    (4).存在しない要素だけをスキップしたい場合は、存在するundefined要素を処理します.
    for(var i = 0;i < a.length;i++){
        if(!(i in a)){
            continue;  //        
        }
        //   
    }
    2.for/inサイクル
    for(var index in sparseArray){
        var value = sparseArray[index];
        //               
    }
    3.forEach()は、索引の順番によって定義された関数に伝達されます.
    var data = [1,2,3,4,5];  //         
    var sumOfSquares = 0;   //         
    data.forEach(function(x){  //           
            sumOfSquares += x*x; //    
        })
    sumOfSquares;  //=>55:1+4+9+16+25
    多次元配列
    1.配列の配列の要素にアクセスするには、簡単に[]操作子を二回使用すればいいです.
    var table = new Array(10);   //   10 
    for(var i = 0;i < table.length;i++){
        table[i] = new Array(10);    //   10 
        //     
        for(var row = 0;row < table.length;row++){
            for(var col = 0;col < table[row].length;col++){
                table[row][col] = row * col;
            }
        }
    }
    //         (  )5*7
    var product = table[5][7];  //35
    配列方法
    1.ジョン()
    (1).Aray.join()メソッドは、配列中のすべての要素を文字列に変換して結合し、最後に生成された文字列を返します.
    var a = [1,2,3];  //             
    a.join();  //=>"1,2,3"
    a.join(" ");  //=>"1 2 3"
    a.join("");  //=>"123"
    var b = new Array(10);  //   10    
    b.join("-")  //=>"---------":9          
    (2)Aray.joinはStering.split()方法の逆方向動作であり、後者は文字列をいくつかのブロックに分割して配列を作成する.
    2.逆転()
    (1).Aray.reverse()方法は、配列中の要素を順序を逆にして、逆順の配列を返します.
    var a = [1,2,3];
    a.reverse().join();  //=>"3,2,1"     a [3,2,1]
    3.sort()
    (1).Aray.sort()メソッドは、配列中の要素を並べ替えて並べ替えられた配列を返します.
    var a = new Array("banana","cherry","apple");
    a.sort();
    var s = a.join(", ");  // s == "apple, banana, cherry"
    (2)配列がundefined要素を含む場合、配列の末尾に配置されます.
    var a = [33,4,1111,222];
    a.sort();  //     :1111,222,33,4
    a.sort(function(a,b){     //    :4,33,222,1111
            return a-b;    //    ,    ,0,  
        })
    a.sort(function(a,b){return b-a});   //         
    4.concat()
    (1)Aray.co ncat()方法は、新しい配列を作成して返します.要素は、concat()の元の配列の要素とconcat()を呼び出す各パラメータを含みます.
    var a = [1,2,3];
    a.concat(4,5);  //  [1,2,3,4,5]
    a.concat([4,5]);  //  [1,2,3,4,5]
    a.concat([4,5],[6,7]);  //  [1,2,3,4,5,6,7]
    a.concat(4,[5,[6,7]]);  //  [1,2,3,4,5,[6,7]]
    5.slice()
    (1)Aray.slice()方法は、指定された配列のフラグメントまたは配列を返す.その二つのパラメータはそれぞれセグメントの開始と終了の位置を指定した.
    var a = [1,2,3,4,5];
    a.slice(0,3);  //  [1,2,3]
    a.slice(3);  //  [4,5]
    a.slice(1,-1);  //  [2,3,4]
    a.slice(-3,-2);  //  [3]
    6.splice()
    (1).Aray.splice()方法は、配列に要素を挿入または削除するための一般的な方法である.slice()とconcat()とは違って、splice()は呼び出した配列を修正します.
    (2).splice()の最初のパラメータは、挿入と削除の開始位置を指定します.2番目のパラメータは、配列から削除すべき要素の個数を指定します.
    var a = [1,2,3,4,5,6,7,8];
    a.splice(4);  //  [5,6,7,8];  a  [1,2,3,4]
    a.splice(1,2);  //  [2,3];   a [1,4]
    a.splice(1,1);   //  [4];  a [1]  
    (3).splice()の前の二つのパラメータは、削除する配列要素を指定しています.次に続く任意の数のパラメータは、配列に挿入する要素を指定し、最初のパラメータで指定された位置から挿入します.
    var a = [1,2,3,4,5];
    a.splice(2,0,'a','b');   //  [];a [1,2,'a','b',3,4,5]
    a.splice(2,2,[1,2],3);  //  ['a','b'];a [1,2,[1,2],3,3,4,5]
    7.push()とpop()
    (1).push()とpop()の方法により、配列をスタックとして使用することができます.
    (2).push()方法は、配列の末尾に1つ以上の要素を追加し、配列の新しい長さを返します.
    (3).pop()方法は逆に、配列の最後の要素を削除し、配列長を減らし、削除した値を返します.
    8.unshift()とshift()
    9.toStering()とtoLocal Stering()
    (1)配列に対して、この方法は各要素を文字列に変換する.
    [1,2,3].toString()   //  '1,2,3'
    ["a","b","c"].toString()  //  'a,b,c'
    [1,[2,'c']].toString()   //  '1,2,c'
    (2).toLocal Stering()は、toStering()メソッドのローカライズバージョンです.
    ECMAScript 5の配列方法
    (1)ECMAScript 5は、9つの新しい配列法を遍歴、マッピング、フィルタ、検出、簡略化、および検索配列を定義しています.
    (2).forEach()
  • forEach()メソッドは、最初から最後まで配列を巡回し、各要素に指定された関数を呼び出します.
  • forEach()は、3つのパラメータを使用して、この関数を呼び出します.配列要素、要素の索引および配列自体です.
  • eg:
    var data = [1,2,3,4,5];
    var sum = 0;
    data.forEach(function(value){
        sum += value;      //=>15
        })
    data.forEach(function(v,i,a){
        a[i] = v +1;  //[2,3,4,5,6]
        })
    (3).map()
  • map()方法は、呼び出した配列の各要素を指定された関数に伝達し、関数の戻り値を含む配列を返す.
  • map()は、呼び出しられた配列を変更しない新しい配列を返します.
  • eg:
    a = [1,2,3];
    b = a.map(function(x){
        return x * x;   //=>b:[1,4,9]
        })
    (4).filter()
  • filter()方法で返される配列要素は、呼び出しられた配列のサブセットである.
  • filter()伝達の関数は論理判定に用いられる.この関数はtrueまたはfalse
  • を返します.
    eg:
    a = [5,4,3,2,1];
    smallvalues = a.filter(function(x){
            return x < 3;  //[2,1]
        })
    everyother = a.filter(function(x,i){
            return i % 2==0;   //[5,3,1]
        })
    (5).every()とsome()
    (6).reduce()とreduceRight()
    (7).indexOf()とlastIndexOf()
    配列の種類
    (1)Aray.isAray()関数で判定できます.
    Array.isArray([]);   //=>true;
    Array.isArray({});   //=>false;
    (2).typeofオペレータは、配列に対して「オブジェクト」を返します.
    クラス配列オブジェクト
    (1)新しい要素がリストに追加された場合、自動的にlength属性を更新します.
    (2)lengthを小さい値に設定すると、配列を切断します.
    (3)アラy.prototypeからいくつかの有用な方法を継承します.
    (4).その類の属性は「Aray」です.
    var a = {};   //          
    //      ,  "   "
    var i = 0;
    while(i < 10){
        a[i] = i * i;
        i++
    }
    a.length = i;
    
    //  ,          
    var total = 0;
    for(var j = 0;j < a.length; j++){
        total += a[j];
    }
    (5).Agmentsオブジェクトは、クラスの配列オブジェクトです.
    (6)クラスの配列オブジェクトを検出するために使用します.
    //  o           
    //       length  ,       typeof      ,    JavaScript ,DOM      length  ,       o.nodeType != 3    
    function isArrayLike(o){
        if(o &&    //o  null,undefined 
            typeof o === "object" &&  //o   
            isFinite(o.length) &&  // o.length     
            o.length >= 0&&  // o.length    
            o.length === Math.floor(o.length) &&  //o.length   
            o.length < 4294967296){  //o.length < 2 ^ 32
            return true;   //o      
        }else{
            return false; //     
        }
    }
    (1)
    var a = {"0":"a","1":"b","2":"c",length:3}   //     
    Array.prototype.join.call(a,"+")  //=> "a+b+c"
    Array.prototype.slice.call(a,0)  //=>["a","b","c"]:       
    Array.prototype.map.call(a,function(x){
            return x.toUpperCase();
        })     //=>["A","B","C"]
    (2)
    var a = {"0":"a","1":"b","2":"c",length:3}   //     
    Array.join.call(a,"+")  //=> "a+b+c"
    Array.slice.call(a,0)  //=>["a","b","c"]:       
    Array.map.call(a,function(x){
            return x.toUpperCase();
        })     //=>["A","B","C"]
    (3)
    Array.join = Array.join || function(a,sep){
        return Array.prototype.join.call(a,sep)
    };
    Array.slice = Array.slice || function(a,sep){
        return Array.prototype.slice.call(a,sep)
    };
    Array.map = Array.map || function(a,sep){
        return Array.prototype.map.call(a,sep)
    }
    配列としての文字列
    (1)文字列の挙動は読み取り専用の配列と似ています.charAt()方法で単一の文字にアクセスする以外に、四角い括弧を使用することもできます.
    var s = "test";
    s.charAt(0)  //=>"t"
    s[1]  //=>"e"
    (2)文字列は可変値ではないので、配列として扱う場合は読み取り専用です.
    s = "JavaScript";
    Array.prototype.join.call(s," ");   //=>"J a v a S c r i p t"
    Array.prototype.filter.call(s,function(x){
            return x.match(/[^aeiou]/);   //        
        }).join(" ")    //=>"J v S c r p t"
    著作権声明:本文はsummerブロガーのオリジナル文章で、ブロガーの許可なしに転載してはいけません.