学習8週間-JS Array


整列


配列は複数の値順に並べられた資料構造である.値の順序とlength propertyがあるので、順序アクセス値に適した資料構造です.
¥¥¥少し並びがわかります.

データ構造の一般的なシナリオ:


  • 各要素が同じデータサイズを有し、配列された要素が1つのデータ型に統一され、シームレスに連続する밀집 배열の資料構造を指す.
    검색 대상 요소의 메모리 주소 = 배열의 시작 메모리 주소 + 인덱스 * 요소의 바이트 수

  • 👍Pros


    すなわち,配列はインデックスによって任意の要素に一度の演算でアクセスできるため,非常に速く動作する.( 時間の複雑さ O(1))

  • 🖕Cons


    ただし、ソートされていない配列で要素を検索する場合は、最初から要素が発見されるまで、配列内のすべての要素を順次検索する必要があります.(線形探索、時間複雑度O(n))
    また、配列に要素を挿入または削除する場合は、配列内の要素を連続的に維持するために要素を移動する必要があります.
  • JavaScript配列:

  • JavaScriptのすべての値は配列の要素であってもよい.すなわち、アレイ内の各要素のメモリ領域は、同じサイズである必要はなく、連続する必要もない(희소 배열).
  • ハッシュ・テーブルを使用して実装されるオブジェクトJavaScript配列の欠点は、通常の配列とは逆にインデックス・アクセス要素を使用すると、通常の配列よりもパフォーマンスが遅いことです.ただし、エレメントを検索、挿入、または削除すると、従来のアレイよりも高速なパフォーマンスが得られます.
  • JavaScriptの配列は配列ではありませんか?

    const arr = [1,2,3]
    typeof arr // 'object'
    
    arr.constructor === Array //true
    Object.getPrototypeOf(arr) === Array.prototype //true
    
    厳密にはjavascriptの配列は、従来の配列動作を模した特殊な객체である.次のコードを見てください.
    console.log(Object.getOwnPropertyDescriptors([1,2,3]))
    /*
    {
      '0': {
        value: 1,
        writable: true,
        enumerable: true,
        configurable: true
      },
      '1': {
        value: 2,
        writable: true,
        enumerable: true,
        configurable: true
      },
      '2': {
        value: 3,
        writable: true,
        enumerable: true,
        configurable: true
      },
      length: {
        value: 3,
        writable: true,
        enumerable: false,
        configurable: false
      }
    }
    */
    このようにJavaScriptの配列はインデックスを表す文字列をproperty「キー」とし,長さpropertyを持つオブジェクトである.配列された要素は実はpropertyの値です.

    JavaScriptの一般オブジェクトと配列


    JAvascriptの配列は、通常のオブジェクトと配列を区別し、要素へのアクセスが通常の配列よりも遅い構造を補うために配列のように動作させる構造を実現します.
    次のコードから見ると,配列と通常のオブジェクトの性能は速度の2倍程度異なる.
    const obj = {}
    console.time('obj performance test')
    for(let i = 0; i < 100000000; i ++){
        obj[i] = i;
    }
    console.timeEnd('obj performance test')
    // obj performance test: 1097.928955078125 ms
    
    const arr = []
    console.time('arr performance test')
    for(let i = 0; i < 100000000; i ++){
        arr[i] = i;
    }
    console.timeEnd('arr performance test')
    // arr performance test: 556.688720703125 ms