📍

JavaScript & TypeScriptにおける配列・オブジェクトの操作

に公開

初めに

こんにちは!JavaScriptとTypeScriptの配列操作 (map, filter, reduce) についてまとめていきたいと思います。

JavaScript編

map(各要素を変換)

const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(num => num * 2);
console.log(doubled); 

実行結果
[ 2, 4, 6, 8, 10 ]

filter(条件に一致する要素を抽出)

const numbers = [1, 2, 3, 4, 5];
const evens = numbers.filter(num => num % 2 === 0);
console.log(evens); 

実行結果
[ 2, 4 ]

reduce(値を累積)

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, num) => acc + num, 0);
console.log(sum); 

実行結果
15

TypeScript編

map(各要素を変換)

const numbers: number[] = [1, 2, 3, 4, 5];
const doubled: number[] = numbers.map((num: number) => num * 2);
console.log(doubled); 

実行結果
[ 2, 4, 6, 8, 10 ]

filter(条件に一致する要素を抽出)

const numbers: number[] = [1, 2, 3, 4, 5];
const evens: number[] = numbers.filter((num: number) => num % 2 === 0);
console.log(evens); 

実行結果
[ 2, 4 ]

reduce(値を累積)

const numbers: number[] = [1, 2, 3, 4, 5];
const sum: number = numbers.reduce((acc: number, num: number) => acc + num, 0);
console.log(sum); 

実行結果
15

オブジェクトの配列を扱う場合

JavaScript

const users = [
  { id: 1, name: "Alice", age: 25 },
  { id: 2, name: "Bob", age: 17 },
  { id: 3, name: "Charlie", age: 30 }
];

const adultUsers = users.filter(user => user.age >= 20);
console.log(adultUsers);

実行結果

TypeScript

type User = { id: number; name: string; age: number };

const users: User[] = [
  { id: 1, name: "Alice", age: 25 },
  { id: 2, name: "Bob", age: 17 },
  { id: 3, name: "Charlie", age: 30 }
];

const adultUsers: User[] = users.filter((user: User) => user.age >= 20);
console.log(adultUsers);

実行結果
[
{ id: 1, name: 'Alice', age: 25 },
{ id: 3, name: 'Charlie', age: 30 }
]

まとめ

JavaScriptでは、map・filter・reduce などの配列操作を型の指定なしで自由に使えます。これは書きやすい反面、意図しないデータ型やエラーに気づきにくいというデメリットがあります。一方、TypeScriptでは型アノテーションを付けることで、各関数の引数や戻り値に型の制約を持たせられます。これにより、型のミスマッチやバグをコンパイル時に発見できます。

Discussion