ロクマルウェーブ

JavaScriptで配列(Array)を操作する方法のまとめ

他の言語だと配列操作はこうなんだけど、JavaScriptだとどう書くんだっけ?そんな時にさっと眺める為の記事です。

目次

配列を作成(宣言・初期化)

// 配列を作成
let arr = ["A", "B", "C"];
console.log(arr); // ["A", "B", "C"]

// 空の配列を作成
let arr2 = []
console.log(arr2); // []

要素を参照

let arr = ["A", "B", "C"];

// 要素を参照
let v =arr[1];
console.log(v); // B

要素数を参照(配列の長さ)

let arr = ["A", "B", "C"];

// 要素数を参照
let l = arr.length;
console.log(l); // 3

要素を繰り返し処理(ループ)

let arr = ["A", "B", "C"];

// forで繰り返す
for(let i = 0; i < arr.length; i++){
    console.log(i);      // 0 → 1 → 2
    console.log(arr[i]); // A → B → C
}

// forEachで繰り返す
arr.forEach((v, i, a) => {
    console.log(i);      // 0 → 1 → 2
    console.log(v);      // A → B → C
});

要素を追加(1つ・複数・配列の要素を追加)

先頭に1つの要素を追加

let arr = ["A", "B"];

// 先頭に1つの要素を追加
arr.unshift("C");
console.log(arr); // ["C", "A", "B"]

先頭に複数の要素を追加

let arr = ["A", "B"];

// 先頭に複数の要素を追加
arr.unshift("C", "D");
console.log(arr); // ["C", "D", "A", "B"]

先頭に配列の要素を追加

let arr = ["A", "B"];
let arr2 = ["C", "D"];

// 先頭に配列の要素を追加
arr.unshift(...arr2);
console.log(arr); // ["C", "D", "A", "B"]

末尾に1つの要素を追加

let arr = ["A", "B"];

// 末尾に1つの要素を追加
arr.push("C");
console.log(arr); // ["A", "B", "C"]

末尾に複数の要素を追加

let arr = ["A", "B"];

// 末尾に複数の要素を追加
arr.push("C", "D");
console.log(arr); // ["A", "B", "C", "D"]

末尾に配列の要素を追加

let arr = ["A", "B"];
let arr2 = ["C", "D"];

// 末尾に配列の要素を追加
arr.push(...arr2);
console.log(arr); // ["A", "B", "C", "D"]

途中に1つの要素を追加

let arr = ["A", "B"];

// 1番目から要素を0個削除し"C"を追加する
arr.splice(1, 0, "C");
console.log(arr); // ["A", "C", "B"]

途中に複数の要素を追加

let arr = ["A", "B"];

// 1番目から要素を0個削除し"C"と"D"を追加する
arr.splice(1, 0, "C", "D");
console.log(arr); // ["A", "C", "D", "B"]

途中に配列の要素を追加

let arr = ["A", "B"];
let arr2 = ["C", "D"];

// 1番目から要素を0個削除し配列要素を追加する
arr.splice(1, 0, ...arr2);
console.log(arr); // ["A", "C", "D", "B"]

要素を削除(1つ・複数・特定の要素を削除)

先頭から1つの要素を削除

let arr = ["A", "B", "C", "D"];

// 先頭から1つの要素を削除
arr.shift();
console.log(arr); // ["B", "C", "D"]

先頭から複数の要素を削除

let arr = ["A", "B", "C", "D"];

// 0番目から要素を2個削除する
arr.splice(0, 2);
console.log(arr); // ["C", "D"]

末尾から1つの要素を削除

let arr = ["A", "B", "C", "D"];

// 末尾から1つの要素を削除
arr.pop();
console.log(arr); // ["A", "B", "C"]

末尾から複数の要素を削除

let arr = ["A", "B", "C", "D"];

// 末尾より2番目から要素を2個削除する
arr.splice(-2, 2);
console.log(arr); // ["A", "B"]

途中から1つの要素を削除

let arr = ["A", "B", "C", "D"];

// 1番目から要素を1個削除する
arr.splice(1, 1);
console.log(arr); // ["A", "C", "D"]

途中から複数の要素を削除

let arr = ["A", "B", "C", "D"];

// 1番目から要素を2個削除する
arr.splice(1, 2);
console.log(arr); // ["A", "D"]

特定の要素を削除

let arr = ["A", "B", "C", "D"];
let r;

// "A"と"C"を除いた配列を取得
r = arr.filter((v, i, a) => 
    // 条件
    // 要素が"A"かつ"C"ではない
    v !== "A" && v !== "C"
);
console.log(r); // ["B", "D"]

要素を更新(1つ・複数・特定の要素を更新)

1つの要素を更新(置換)

let arr = ["A", "B", "C", "D"];

// 1つの要素を更新(置換)
arr[1] = "E";
console.log(arr); // ["A", "E", "C", "D"]

複数の要素を同一の値に更新(置換)

let arr = ["A", "B", "C", "D"];

// 1番目から3番目まで"E"で更新
arr.fill("E", 1, 3);
console.log(arr); // ["A", "E", "E", "D"]

複数の要素を異なる値に更新(置換)

let arr = ["A", "B", "C", "D"];

// 1番目から要素を2個削除し"E"と"F"を追加する
arr.splice(1, 2, "E", "F");
console.log(arr); // ["A", "E", "F", "D"]

特定の要素を更新(置換)

let arr = ["A", "B", "C", "D"];
let r;

// "A"と"C"を"E"に変更した配列を取得
r = arr.map((v, i, a) => 
    // 条件
    // 要素が"A"または"C"のときは"E"にする
    v === "A" || v === "C" ? "E" : v
);
console.log(r); // ["E", "B", "E", "D"]

要素を検索(要素の存在を確認、値と位置を取得)

検索した要素の存在を確認(チェック)

let arr = ["A", "B", "C", "A"];
let r;

// 検索した要素の存在を確認
r = arr.some((v, i, a) => 
    // 条件
    // 要素が"A"である
    v === "A"
);
console.log(r); // true

// 見つからない時、someはfalseを返す
r = arr.some((v, i, a) => 
    v === "D"
);
console.log(r); // false

検索した要素の値を1つ取得

let arr = ["A", "B", "C", "A"];
let r;

// 検索した要素の値を1つ取得
r = arr.find((v, i, a) => 
    // 条件
    // 要素が"A"である
    v === "A"
);
console.log(r); // A

// 見つからない時、findはundefinedを返す
r = arr.find((v, i, a) => 
    v === "D"
);
console.log(r); // undefined

検索した要素の値を全て取得

let arr = ["A", "B", "C", "A"];
let r;

// 検索した要素の値を全て取得
r = arr.filter((v, i, a) => 
    // 条件
    // 要素が"A"である
    v === "A"
);
console.log(r); // ["A", "A"]

// 見つからない時、filterは空の配列を返す
r = arr.filter((v, i, a) => 
    v === "D"
);
console.log(r); // []

検索した要素のインデックスを1つ取得

let arr = ["A", "B", "C", "A"];
let r;

// 検索した要素のインデックスを1つ取得
r = arr.findIndex((v, i, a) => 
    // 条件
    // 要素が"A"である
    v === "A"
);
console.log(r); // 0

// 見つからない時、findIndexは-1を返す
r = arr.findIndex((v, i, a) => 
    v === "D"
);
console.log(r); // -1

検索した要素のインデックスを全て取得

let arr = ["A", "B", "C", "A"];
let r;

// 検索した要素のインデックスを全て取得
r = arr.reduce((c, v, i, a) => {
    // 条件
    // 要素が"A"である
    if(v === "A"){
        c.push(i);
    }
    return c;
},[]);
console.log(r); // [0, 3]

// 見つからない時、この場合は空の配列を返す
r = arr.reduce((c, v, i, a) => {
    if(v === "D"){
        c.push(i);
    }
    return c;
},[]);
console.log(r); // []

要素を並び変え(昇順ソート・降順ソート・反転)

数値の要素を昇順ソート

let arr = [2, 1, 3, 10];

// 数値の要素を昇順ソート
arr.sort((a, b) => 
    a < b ? -1 : 1
);
console.log(arr); // [1, 2, 3, 10]

数値の要素を降順ソート

let arr = [2, 1, 3, 10];

// 数値の要素を降順ソート
arr.sort((a, b) => 
    a > b ? -1 : 1
);
console.log(arr); // [10, 3, 2, 1]

数値の要素を反転ソート

let arr = [2, 1, 3, 10];

// 数値の要素を反転ソート
arr.reverse();
console.log(arr); // [10, 3, 1, 2]

文字列の要素を昇順ソート

let arr = ["B", "A", "C", "b"];

// 文字列の要素を昇順ソート
arr.sort((a, b) => 
  a.toLowerCase() < b.toLowerCase() ? -1 : 1
);
console.log(arr); // ["A", "B", "b", "C"]

文字列の要素を降順ソート

let arr = ["B", "A", "C", "b"];

// 文字列の要素を降順ソート
arr.sort((a, b) => 
  a.toLowerCase() > b.toLowerCase() ? -1 : 1
);
console.log(arr); // ["C", "B", "b", "A"]

文字列の要素を反転ソート

let arr = ["B", "A", "C", "b"];

// 文字列の要素を反転ソート
arr.reverse();
console.log(arr); // ["b", "C", "A", "B"]

要素を集約(最大・最小・合計・平均・カウント)

要素の最大値を取得

let arr = [10, 2, 30, 4];
let r;

// 要素の最大値を取得
r = arr.reduce((c, v, i, a) => 
    c > v ? c : v
);
console.log(r); // 30

要素の最小値を取得

let arr = [10, 2, 30, 4];
let r;

// 要素の最小値を取得
r = arr.reduce((c, v, i, a) => 
    c < v ? c : v
);
console.log(r); // 2

要素の合計値を取得

let arr = [1, 2, 3, 4];
let r;

// 要素の合計値を取得
r = arr.reduce((c, v, i, a) => 
    c + v
, 0);
console.log(r); // 10

要素の平均値を取得

let arr = [1, 2, 3, 4];
let r;

// 要素の平均値を取得
r = arr.reduce((c, v, i, a) => 
    c + v
, 0)/arr.length;
console.log(r); // 2.5

特定の要素の件数を取得(カウント)

let arr = [10, 2, 30, 4];
let r;

// 特定の要素の件数を取得
r = arr.reduce((c, v, i, a) => 
    // 条件
    // 要素が10以上である
    v >= 10 ? c + 1 : c
, 0);
console.log(r); // 2

重複した要素の削除と抽出

重複した要素の削除

let arr = ["B", "A", "A", "C", "B", "A"];
let r;

// 重複した要素の削除
r = arr.filter((v, i, a) => 
    i === a.findIndex((w, j, b) => 
        v === w
    )
);
console.log(r); // ["B", "A", "C"]

重複した要素の抽出

let arr = ["B", "A", "A", "C", "B", "A"];
let r;

// 重複した要素の抽出
r = arr.filter((v, i, a) => 
    0 <= a.findIndex((w, j, b) => 
        v === w &&  i !== j 
    )
);
console.log(r); // ["B", "A", "A", "B", "A"]

配列を複製(コピー)

配列の浅い複製(シャローコピー)

let arr = ["A", "B", "C"];
let r;

// Array.fromで複製
r = Array.from(arr);
console.log(r); // ["A", "B", "C"]

// concatで複製
r = arr.concat();
console.log(r); // ["A", "B", "C"]

// sliceで複製
r = arr.slice();
console.log(r); // ["A", "B", "C"]

配列の深い複製(ディープコピー)

let arr = ["A", "B", "C"];
let r;

// JSON.parseとJSON.stringifyで複製
r = JSON.parse(JSON.stringify(arr));
console.log(r); // ["A", "B", "C"]

配列を結合(連結)

1つの要素を結合

let arr = ["A", "B"];
let r;

// 1つの要素を結合した配列を取得
r = arr.concat("C");
console.log(r);// ["A", "B", "C"]

// 元の配列は変化なし
console.log(arr);// ["A", "B"]

複数の要素を結合

let arr = ["A", "B"];
let r;

// 複数の要素を結合した配列を取得
r = arr.concat("C", "D");
console.log(r);// ["A", "B", "C", "D"]

// 元の配列は変化なし
console.log(arr);// ["A", "B"]

1つの配列の要素を結合

let arr = ["A", "B"];
let arr2 = ["C", "D"];
let r;

// 1つの配列の要素を結合した配列を取得
r = arr.concat(arr2);
console.log(r);// ["A", "B", "C", "D"]

// 元の配列は変化なし
console.log(arr);// ["A", "B"]

複数の配列の要素を結合

let arr = ["A", "B"];
let arr2 = ["C", "D"];
let arr3 = ["E"];
let r;

// 複数の配列の要素を結合した配列を取得
r = arr.concat(arr2, arr3);
console.log(r);// ["A", "B", "C", "D", "E"]

// 元の配列は変化なし
console.log(arr);// ["A", "B"]

配列を分割(切り出し)

let arr = ["A", "B", "C", "D"];
let r;

// 1番目から3番目の要素(の前)まで分割
r = arr.slice(1, 3);
console.log(r);// ["B", "C"]

// 1番目から最後まで分割
r = arr.slice(1);
console.log(r);// ["B", "C", "D"]

// 元の配列は変化なし
console.log(arr);// ["A", "B", "C", "D"]

配列から文字列へ変換

let arr = ["A", "B", "C"];
let str;

// 区切り文字をカンマで文字列に変換
str = arr.join(",");
console.log(str); // A,B,C

// 区切り文字を空白で文字列に変換
str = arr.join("");
console.log(str); // ABC

配列であるか確認(チェック)

let arr = ["A"];
let str = "A";
let r;

// 変数arrは配列であるか確認
r = Array.isArray(arr);
console.log(r); // true

// 変数strは配列であるか確認
r = Array.isArray(str);
console.log(r); // false

できるだけシンプルにまとめたつもりです!以上です!