【ヒント】JavaScript配列:必須のヒントとテクニック

By hungpd, at: 2025年3月1日12:01

Estimated Reading Time: __READING_TIME__ minutes

[TIPS] Javascript Array: Essential Tips and Tricks
[TIPS] Javascript Array: Essential Tips and Tricks

[TIPS] Javascript Array:必須のヒントとテクニック


配列は、JavaScriptで最も一般的に使用されるデータ構造の1つです。これにより、複数の値を単一の変数に格納でき、データ操作を簡素化する強力な組み込みメソッドが提供されます。このブログ投稿では、コードスニペット、説明、および各アプローチの長所と短所を含め、配列を効率的に操作するための必須のヒントについて説明します。

 

1. 要素の追加と削除


PushとPop(スタック動作)
 

  • push()は、配列の最後に要素を追加します。

  • pop()は、最後の要素を削除します。

 

例:

let arr = [1, 2, 3];
arr.push(4);  // [1, 2, 3, 4]
arr.pop();   // [1, 2, 3]

 

長所配列の末尾の変更にシンプルで効率的です。


短所複数の挿入/削除が必要な場合、大規模な配列では非効率的です。

 

ShiftとUnshift(キュー動作)
 

  • unshift()は、配列の先頭に要素を追加します。

  • shift()は、最初の要素を削除します。

 

例:

let arr = [1, 2, 3];
arr.unshift(0);  // [0, 1, 2, 3]
arr.shift();     // [1, 2, 3]

 

長所キューの実装に役立ちます。


短所要素のシフトには再インデックスが必要なため、大規模な配列では低速です。

 

パフォーマンス比較

// 例:push/popとshift/unshiftのパフォーマンス比較
let largeArray = Array.from({ length: 100000 }, (_, i) => i);

console.time("push/pop");
for (let i = 0; i < 1000; i++) {
  largeArray.push(i);
  largeArray.pop();
}
console.timeEnd("push/pop");

console.time("shift/unshift");
for (let i = 0; i < 1000; i++) {
  largeArray.unshift(i);
  largeArray.shift();
}
console.timeEnd("shift/unshift");


説明: ベンチマークからわかるように、pushpop操作は、大規模な配列ではshiftunshiftよりも大幅に高速です。これは、shiftunshiftでは、後続のすべての要素を再インデックスする必要があるため、コストのかかる操作になるためです。

 

2. 配列の複製

 

Sliceテクニック


既存の配列を変更する代わりに、コピーを使用して作業する場合があります。

 

例:

let arr = [1, 2, 3];
let copy1 = [...arr];    // スプレッド演算子の使用
let copy2 = arr.slice(); // slice()の使用

 

長所どちらの方法も効率的で、元の配列の変更を防ぎます。


短所ディープコピーには適していません(ネストされた配列は参照されたままです)。

 

ディープコピーテクニック

// 例:JSON.parse(JSON.stringify())を使用したディープコピー
let nestedArray = [1, [2, 3], 4];
let deepCopy = JSON.parse(JSON.stringify(nestedArray));
deepCopy[1][0] = 99; // コピーの変更

console.log(nestedArray); // 元は変更されないまま
console.log(deepCopy); // ディープコピーは変更を反映する

// 制限事項の説明:
// - 関数、undefined、または循環参照では機能しません。
// - シャローコピーよりも遅い。

// Lodashを使用する例(追加する場合):
// const _ = require('lodash');
// let deepCopyLodash = _.cloneDeep(nestedArray);

 

3. 配列に対する関数型操作

 

Map、Filter、Reduce
 

  • map():各要素を変換します。

  • filter():条件に基づいて要素を選択します。

  • reduce():配列に基づいて単一の値を計算します。

 

例:

let numbers = [1, 2, 3, 4];
let doubled = numbers.map(n => n * 2);  // [2, 4, 6, 8]
let evens = numbers.filter(n => n % 2 === 0); // [2, 4]
let sum = numbers.reduce((acc, n) => acc + n, 0); // 10

 

長所簡潔で効率的で、関数型プログラミングに適しています。


短所新しい配列を作成するため、メモリをより多く使用することがあります。

 

高度なテクニック

// 例:プロパティによるオブジェクトのグループ化
let people = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: 25 },
];

let groupedByAge = people.reduce((acc, person) => {
  if (!acc[person.age]) {
    acc[person.age] = [];
  }
  acc[person.age].push(person);
  return acc;
}, {});

console.log(groupedByAge);

// 例:頻度マップの作成
let letters = ['a', 'b', 'a', 'c', 'b', 'b'];
let letterFrequency = letters.reduce((acc, letter) => {
  acc[letter] = (acc[letter] || 0) + 1;
  return acc;
}, {});
console.log(letterFrequency);


説明: reduce()メソッドは、オブジェクトのグループ化や頻度マップの作成など、複雑なデータ変換に非常に強力です。

 

4. 配列内の要素の検索

 

find()findIndex()の使用
 

  • find()は、条件に一致する最初の要素を返します。

  • findIndex()は、最初に一致する要素のインデックスを返します。

 

例:

let users = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' }
];
let user = users.find(u => u.id === 2);  // { id: 2, name: 'Bob' }
let index = users.findIndex(u => u.id === 2);  // 1

 

長所配列内のオブジェクトを簡単に検索できます。


短所最初のマッチで停止するため、複数の結果には適していません。

 

5. 要素の確認

 

includes()の使用


includes()メソッドは、配列に特定の値が含まれているかどうかを確認します。

 

例:

let fruits = ['apple', 'banana', 'mango'];
console.log(fruits.includes('banana')); // true

 

長所存在確認のためのシンプルな構文です。


短所プリミティブ値(オブジェクトではない)でのみ機能します。

 

6. 重複の削除

 

Setの使用


Setは、配列から重複する値を自動的に削除します。

 

例:

let numbers = [1, 2, 2, 3, 4, 4];
let unique = [...new Set(numbers)];  // [1, 2, 3, 4]

 

長所シンプルで高速、かつ組み込みです。


短所オブジェクトでは機能しません(その場合はmap()を使用します)。

 

7. ネストされた配列のフラット化

 

flat()の使用


flat()メソッドは、ネストされた配列を指定された深さまでフラット化します。

 

例:

let nested = [1, [2, 3], [4, [5, 6]]];
let flatArr = nested.flat(2);  // [1, 2, 3, 4, 5, 6]

 

長所深くネストされた配列を扱う際の複雑さを軽減します。


短所最新のブラウザでのみ機能します。

 

8. 配列のソート

 

sort()の使用(注意して)


デフォルトでは、sort()は要素を文字列に変換してからソートするため、問題が発生することがあります。

 

例:

let numbers = [3, 1, 10, 5];
numbers.sort((a, b) => a - b); // [1, 3, 5, 10](昇順)

 

長所配列を任意の順序でソートするために柔軟性があります。


短所比較関数がないと、辞書順でソートされ、予期しない結果になる可能性があります。

 

sort()のエッジケース

// 例:sort()のエッジケース
let mixedArray = [undefined, 1, 10, null, 5, 'a'];
mixedArray.sort((a,b) => {
    if (a === undefined) return 1;
    if (b === undefined) return -1;
    if (a === null) return 1;
    if (b === null) return -1;
    if (typeof a === 'string') return 1;
    if (typeof b === 'string') return -1;
    return a - b;
});
console.log(mixedArray);

 

9. 文字列の配列への変換

 

split()の使用


一般的なユースケースは、文字列を配列に分割することです。

 

例:

let str = "hello world";
let words = str.split(" ");  // ["hello", "world"]

 

長所テキストの解析と操作に役立ちます。


短所セパレータが必要であり、複数のスペースは適切に処理されません。

 

最後に


JavaScript配列は強力で汎用性があります。これらのヒントをマスターすることで、よりクリーンで効率的なコードを作成できます。

問題/質問がある場合はご連絡ください

Tag list:
- JavaScript map filter reduce
- JavaScript best practices
- JavaScript array methods
- How to use arrays in JavaScript
- JavaScript functional programming
- JavaScript array tips
- JavaScript array push and pop
- JavaScript arrays
- Sorting arrays in JavaScript
- Removing duplicates in JavaScript

Related

Javascript Tools

Read more
Python Unit Test

Read more
Python Flask

Read more

Subscribe

Subscribe to our newsletter and never miss out lastest news.