[javascript] Array


💡 Array


キーで識別可能な値を含む集合はオブジェクトと呼ばれるデータ構造を用いて記憶され,オブジェクトのみを用いて多様な操作が可能である.
しかし開発の過程では,1つ目の要素,2つ目の要素,3つ目の要素のような順序のある集合が必要となる場合がしばしばある.このとき使うのが配列です.
// 선언
let arr = new Array(item1, item2...);
let arr = [item1, item2...];

let arr = new Array(2);
alert(arr[0]); //undefined
alert(arr.lenght) //2
通常、2番目の宣言が使用されます.new Array(number)を呼び出すと、要素が空であるため、numberの長さの配列が作成されます.
let fruits = ["사과", "오렌지", "자두"];

// 요소 확인
alert( fruits[1] ); // 오렌지

// 요소 수정/추가
fruits[2] = '배';
fruits[3] = '레몬'; // ["사과", "오렌지", "배", "레몬"]

alert( fruits.length ); // 4
配列要素の資料型に制限はありません.
let arr = [ '사과', { name: '이보라' }, true, function() { alert('안녕하세요.'); } ];

// 객체의 프로퍼티 출력
alert( arr[1].name ); // 이보라

// 함수 실행
arr[3](); // 안녕하세요.
🌱 接尾辞カンマ
配列の最後の要素は、オブジェクトのようにカンマで終わることができます.[ドラッグ](Draft)カンマを使用すると、すべての行のシェイプが似ているため、要素を追加または減算しやすくなります.
ex)letフルーツ=[「りんご」、「オレンジ」、「李子」];

💡 pop, push, shift, unshift


キュー


配列と同じ順序の集合を格納するために、配列を使用して作成できる典型的なデータ構造.
  • push-末尾に要素
  • を追加
  • shift-一番前の要素を取り出し、残りの要素を前に押します.では2つ目の要素が1つ目の要素になります!
  • キューを使用すると、最初に挿入された要素が表示されるので、キューはFirst-In-First-Out、FIFOのデータ構造です.

    スタック(スタック)


    スタックはデータ構造で、「一端」で要素を追加または削除できます.
  • push–スタックの最後に要素
  • を追加
  • pop–スタック終了要素の抽出
    スタックは、最初に最後尾の要素をリストするので、「後入先出」(Last-In-Firt-Out,LIFO)データ構造
  • である.
    コンピュータ科学の分野では,加減算要素演算を提供するデータ構造をDeque,Double Ended Queueと呼ぶ.
    🌱 アレイの最後に何かをする方法
    pop:アレイエンドポイント要素を除去し、除去された要素を返します.
    push:配列の最後に要素を追加
    let fruits = ["사과", "오렌지", "배"];
    
    fruits.pop();
    alert( fruits ); // 사과,오렌지
    
    fruits.push("망고");
    alert( fruits ); // 사과,오렌지,망고
    🌱 配列の前で何かをする方法
    shift:配列の前の要素を削除し、削除した要素を返します.
    unshift:配列の前に要素を追加する
    let fruits = ["사과", "오렌지", "배"];
    
    fruits.shift();
    alert( fruits ); // 오렌지,배
    
    fruits.unshift('망고');
    alert( fruits ); // 망고,오렌지,배
    pushとunshiftは一度に複数の要素を追加できます.
    let fruits = ["사과"];
    
    fruits.push("오렌지", "배");
    fruits.unshift("파인애플", "레몬");
    
    // ["파인애플", "레몬", "사과", "오렌지", "배"]
    alert( fruits );

    💡 アレイの内部運動原理


    配列は特殊なタイプのオブジェクトです.角カッコ(arr[0])を使用して配列arrの要素にアクセスする方法は、キーが数値である点でオブジェクト構文から来ます.
    数値キーを使用することによって、配列は、オブジェクトの基本機能以外の秩序化された集合を制御するための特殊な方法を提供する.
    配列の本質は客体であるため、原始資料型ではなく客体のように活動する.たとえば、配列はオブジェクトと同じように参照によってコピーされます.
    let fruits = ["바나나"]
    
    let arr = fruits; // 참조 복사(두 변수가 같은 객체를 참조)
    
    alert( arr === fruits ); // true
    
    arr.push("배"); // 참조를 이용해 배열을 수정
    
    alert( fruits ); // 바나나,배
    🌱 配列を誤って使用した例
  • arr.test=5であり、propertyキーとして非数値値を使用する場合は
  • である.
  • arr[0]およびarr[1000]のみが追加され、要素がない場合は
  • となります.
  • arr[1000]およびarr[999]のような要素を逆順序で充填する場合、
  • .
    配列はオブジェクトなので、例のように必要なプロパティを追加しても問題はありません.しかし,これによりJavaScriptエンジンは通常のオブジェクトのように配列を処理するため,配列を処理する際にのみ使用される最適化手法が機能せず,配列特有の利点が解消される.

    💡 パフォーマンス:


    pushとpopは速いですが、shiftとunshiftは遅いです.
    shift操作手順
    1.インデックスが0の要素を削除
    2.すべての要素を左に移動します.このとき、インデックス1は0、2は1になります.
    3.長さパーセント値の更新
    unshiftを実行しても同様のことが起こります.
    逆に、pushまたはpopは要素の移動を伴わない.popメソッドを使用して最後から要素を削除するには、最後の要素を削除し、length propertyの値を小さくするだけで終了します.
    popメソッドは要素を移動しないので、各要素は既存のインデックスを保持します.だから運行速度が速い.

    💡 複文


    for (let i=0; i<arr.length; i++)


    これは最も速い方法で、古いブラウザと互換性があります.
    let arr = ["사과", "오렌지", "배"];
    
    for (let i = 0; i < arr.length; i++) {
      alert( arr[i] );
    }

    for (let item of arr)


    この繰り返し文を使用すると、現在の要素のインデックスが取得されず、値のみが取得されます.アレイ要素を繰り返し操作するときに使用します.
    let fruits = ["사과", "오렌지", "자두"];
    
    for (let fruit of fruits) {
      alert( fruit );
    }

    for (let i in arr)


    配列はオブジェクトタイプに属するのでfor...inも使えますが、使わないでください
    let arr = ["사과", "오렌지", "배"];
    
    for (let key in arr) {
      alert( arr[key] ); // 사과, 오렌지, 배
    }
    どうしてウェブサイトを使えないのですか?
  • for..in繰り返し文は、すべてのpropertyを巡回します.
    すなわち,テンキー以外のプログラムも巡回ターゲットに含まれる.各length propertyまたは要素にはインデックスがあり、非数値型のpropertyおよびメソッドもあります.そのため、不要な専門家が問題を引き起こす可能性があります.
  • for..in反復文は配列ではなくオブジェクトと一緒に使用する場合に最適化されるため,配列に使用するとオブジェクトに使用するより10〜100倍遅い.
  • 💡 ‘length"Propertyと多次元配列


    length


    配列を操作すると、length propertyが自動的に更新されます.length propertyは配列内の要素の個数ではなく、最大インデックスに1を加えた値です.
    let fruits = [];
    fruits[123] = "사과";
    
    alert( fruits.length ); // 124
    上記の例のように使用しないでください.
    lengthの値は使用できます.たとえば、値を手動で増やしても何も起こりませんが、値を減らすと配列が切断されます.短縮されたアレイは復元できません.
    let arr = [1, 2, 3, 4, 5];
    
    arr.length = 2;
    alert( arr ); // [1, 2]
    
    arr.length = 5; // 본래 길이로 되돌리기(?)
    alert( arr[3] ); // undefined 
    これらの特徴を利用してarr.length=0;非常に簡単に並べ替えができます.

    たじゅうはいれつ


    マトリックスを格納します.
    let matrix = [
      [1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]
    ];
    alert( matrix[1][1] ); // 5

    💡 toString


    配列にはtoStringメソッドが実装されており、要素をカンマで区切った文字列を返すように呼び出されます.
    let arr = [1, 2, 3];
    
    alert( arr ); // 1,2,3
    alert( String(arr) === '1,2,3' ); // true
    
    alert( [] + 1 ); // "1"
    alert( [1] + 1 ); // "11"
    alert( [1,2] + 1 ); // "1,21"
    配列にはSymbolが含まれています.TOPrimitiveメソッドまたはvalueOfメソッドはありません.したがって文字列の変換が発生し、[]が空の文字列に変換され、[1]が文字列「1」に変換され、[1,2]が文字列「1,2」に変換される.
    1つの被演算子が文字列である場合、この加算演算子「+」は他の被演算子を文字列に変換します.

    💡 n/a.結論


    配列は特殊な資料構造であり,順序のある資料を格納するために用いられる.
    任意のキーを使用する必要がある場合は、配列よりも通常のオブジェクト{}が適切です.
    参考資料
  • https://ko.javascript.info/array