001 Arayタイプ

6872 ワード

この本はJavaScriptプログラミングの聖書とも言われています.また、紅宝書とも言われています.この本を覚えているのは、先のほうでサイの本と一緒に買いました.その間にとぎれとぎれにひっくり返しました.ほとんどが灰に落ちています.この本はとても経典的で、JavaScriptのプログラミングの方面についてほぼすべて述べました.もし一回通読できるなら、文書をめくったり資料を調べたりする時間を省きます.この本の内容もとても豊富です.だから、専門的に文集を作って、本のノートを読みます.
判定配列
判断配列については、ここで2つの方法をまとめます.1.Objectプロトタイプチェーン上のtoString方法を用いて判断します.
function isArray(arr){
    return Object.prototype.toString.call(arr).indexOf("Array") !== -1
}

isArray([]) // true
isArray({}) // false
2.Arrayオブジェクト上原生のisArray方法を使用する:
Array.isArray([]) //true
Array.isArray({}) //false
配列のtoString方法
配列のtoString方法を呼び出して、順番に配列の各項目のtoString方法を呼び出して、リターン値をカンマでスティッチングします.
const arr = [{a:1},[],1,2,"hello"]
arr.toString() // "[object Object],,1,2,hello"
同じように、配列のtoLocaleStringおよびvalueOf方法を呼び出すときも、配列の各要素のtoLocaleStringまたはvalueOf方法を順次呼び出し、コンマを用いてスティッチングする.また、配列の各要素のtoString方法を変更して、デフォルトの結果を置き換えることもできます.
let ele1 = {
    name:"ele1",
    toString(){
        return "   "
    }
}
let ele2 = {
    name:"ele2",
    toString(){
        return "   "
    }
}
const arr = [ele1,ele2]

arr.toString() //"   ,   "
配列のtoLocaleStringおよびvalueOf方法についても同様に適用される.
スタック/キューの方法
配列を用いてスタックまたはキューデータ構造をシミュレートすることができます.スタック方法:push及びpop:
let arr = []
arr.push(1,2)
arr.pop() //2
arr.pop() //1
列に対する方法:pushおよびshift:
let arr = []
arr.push(1,2)
arr.shift() //1
arr.shift() //2
逆行列:unshiftおよびpop:
let arr = []
arr.unshift(1,2)
arr.pop() //2
arr.pop() //1
ソート方法
1.reverse方法:配列を反転するための方法.
let arr = [1,2,3]
arr.reverse() // [3,2,1]
2.sort方法は、配列を並べ替えるために使用され、デフォルトでは昇順に並べ替えられ、順序付け時に要素のtoStringによって位置比較を行う.したがって、次の順序は私たちが望んだ結果ではないかもしれません.
let arr = [1,2,10,3,20]
arr.sort() //[1,10,2,20,3]
これに加えて、sort方法は、パラメータとして関数を受け入れ、順序付け規則をカスタマイズすることができる.このパラメータ関数は、2つの比較対象の要素をパラメータとして受け入れ、関数の戻り値は、この2つの要素の並べ替えを決定します.
  • 戻り値が0以下、昇順
  • の戻り値は0より大きく、降順は
  • です.
  • の戻り値は0に等しく、この2つのパラメータが等しいことを示し、パラメータ順序に従って
  • を並べ替える.
    let arr = [1,2,10,20,3]
    arr.sort((prev,next) => prev - next) // [1, 2, 3, 10, 20]
    
    以上の方法は、要素のvalueOf方法で数値を返す場合(または数値に暗黙的に変換することができる)に適用される.要素のvalueOf方法で戻ってきたのが数値ではない場合(または暗黙的に数値に変換できる場合)、私達は手動で判断してから戻ります.
    let arr = [{val:1},{val:2},{val:10},{val:20},{val:3}]
    arr.sort((prev,next) => {
        return prev.val - next.val
    }) //  [{val:1},{val:2},{val:3},{val:10},{val:20}]
    
    reverseおよびsortの方法は、元の配列において修正される.
    操作方法
    1.concat方法この方法は、配列結合を行うために用いられ、許容されるパラメータは以下の通りである.
  • 引数なし:現在の配列のコピーを返します.
  • パラメータは、1つ以上の変数、配列:現在の配列とパラメータ要素を統合し、統合された配列
  • を返します.
    配列がパラメータに含まれている場合は、この配列を分解して、新しい配列に結合します.
    [].concat(1,2,[3,[4,5]]) //[1,2,3,[4,5]]
    
    この方法は元の配列を変更しません.2.slice方法は、元の配列から要素の一部を切り取り、これらの要素に基づいて新たな配列を作成する方法である.slice方法のパラメータ:
  • 開始位置:切り取り配列時の開始位置は、負の値とすることができます.オプションで、デフォルトは0
  • です.
  • 終了位置:切り取り配列時の終了位置は、負の値とすることができます.オプションとして、デフォルトは配列の長さ
  • です.sliceのパラメータがマイナスの場合、このパラメータと配列長の和は実際の切り取り時の启示/終了位置であり、終了位置(計算された変換後)が開始位置(計算された変換後)より小さい場合には、空の配列に戻る.
    [1,2,3].slice() //[1,2,3]
    [1,2,3].slice(1) //[2,3]
    [1,2,3].slice(-2,-1) //[2]
    [1,2,3].slice(-1,-2) //[]
    ...
    
    slice方法は、元の配列を変更しない.3.splice方法は、配列要素を削除、挿入、置換するために使用できる強力な方法である.この方法は元の配列を変更します.1)要素削除spliceを使用して配列要素を削除するには2つのパラメータが必要です.
  • 要素の開始位置
  • を削除する.
  • 削除要素の個数
  • 削除された要素からなる配列を返します.
    let arr = [1,2,3]
    arr.splice(0,1) //[1]
    arr //[2,3]
    
    2)要素を挿入するsplice方法で要素を挿入するには少なくとも3つのパラメータが必要である.
  • 挿入の開始位置
  • 0(要素を削除しないことを示す)
  • に挿入された要素シーケンスは、複数の
  • であることができる.
    要素が削除されていないので、この方法を呼び出して空の配列を返します.
    let arr = [1,2,3]
    arr.splice(0,0,"memeda","heheda") //[]
    arr // ["memeda", "heheda", 1, 2, 3]
    
    3)代替要素がspliceを使用して要素を置換する原理は、まず要素を削除し、その位置において置換し、置換時に複数の要素シーケンスを使用することができる.
    let arr = [1,2,3]
    arr.splice(1,1,"memeda","heheda") //[2]
    arr //[1, "memeda", "heheda", 3]
    
    位置について
    配列には2つの位置方法があります.indexOflastIndexOfという方法は、配列内の要素の位置を調べるために用いられます.indexOfは、配列の先頭から探し始め、最初の一致する要素が見つかったら停止し、もし要素にマッチしていないなら、-1に戻り、lastIndexOfは、配列の最後から探し始め、マッチング方式は類似している.indexOflastIndexOfとが要素に一致するときは厳密に等しい(==)が要求されることに留意されたい.さらに、この2つの方法は、開始位置と終了位置の2つのパラメータ(オプション)を受け入れて、検索の位置を表してもよい.
    let person = {name:"MIKE"}
    let arr1 = [{name:"MIKE"}]
    let arr2 = [person]
    arr1.indexOf(person) //-1
    arr2.indexOf(person) //0
    
    indexOfおよびlastIndexOfの方法を使用して要素に適合する場合は厳密に等しいことが要求されるので、arr1配列はpersonオブジェクトに一致しない.
    反復方法
    配列にはいくつかの反復法があり、配列内部の要素をいくつかの反復操作するために用いられています.これらの方法はいずれもパラメータとして関数を受け入れています.反復するたびにこの関数を実行します.関数のパラメータは、値、位置、元の配列1.every方法であり、この方法は、配列の各項目を反復するために用いられ、関数が各要素をtrueに返すと、everyの戻り値はtrueである.
    [1,2,3].every((v)=> v>0) //true
    [1,2,3].every((v)=> v>1) //false
    
    2.some方法は、方法およびeveryと同様であるが、各要素に対して関数がtrueに戻ることは要求されない.反復時に1つの要素がある限り、trueに戻り、some方法はtrueに戻る.trueであれば、everyの戻り値はtrueである.
    [1,2,3].some((v)=> v>0) //true
    [1,2,3].some((v)=> v>1) //true
    
    3.filter方法この方法は、配列の各項目をフィルタリングし、要求に合致する要素リストを返すために使用される.
    [1,2,3].filter(v=>v%2) //[1,2]
    
    4.forEach方法は、通常のforサイクルと同様に、行列の各項目を動作させるために使用される.
    [1,2,3].forEach(v=>{ console.log(v) }) // 1,2,3
    
    5.map方法は、配列の各項目を動作させ、動作の結果を新しい配列にマッピングする方法である.
    [1,2,3].map(v=>v*2) //[2,4,6]
    
    統合方法
    配列には、2つの正規化方法がある.reducereduceRight.これらの2つの方法は、配列の各項目を反復し、最終的な戻り値を構築する.4つのパラメータを受け入れることができます.
  • 前の値
  • の後の値
  • 現在のインデックス
  • 元配列オブジェクト
  • 反復の間、関数の戻り値は、次の反復の関数に最初のパラメータとして入ってきて、最終的には最終的な値を返します.最初の反復では、前のパラメータと後のパラメータは、それぞれ配列の最初の要素と第二の要素である.reduceRightは、配列の終端から始まり、他のreduceと一致する.
    //          
    [1,2,3,4,5].reduce((prev,next) => prev * next) //120
    [1,2,3,4,5].reduceRight((prev,next) => prev + next) //15
    
    配列要素のアキュムレータ、累積などの動作に関わる場合、この2つの方法は使いやすいです.
    終わります.