🐍

Javascriptとpythonで共通する配列操作関数に関する実装の違い

2023/05/24に公開

CodeWars などのプログラミング学習サイトで複数言語で問題を解く際に、
言語間で実装の引き出しを覚えていたら便利だと感じています。

本記事では、PythonとJavaScriptの両方で利用できるmapfilterreduce関数
について紹介します。これらの関数は、配列やリストなどのシーケンスの要素に対して、
効率的に操作を行うことができます。

map関数

map 関数は、配列やリストの要素に対して、指定した関数を適用した新しい配列を作成します。

Python

# 1から5までの数字を2倍したリストを作成する
numbers = [1, 2, 3, 4, 5]
doubled_numbers = list(map(lambda x: x * 2, numbers))
print(doubled_numbers) # [2, 4, 6, 8, 10]

JavaScript

// 1から5までの数字を2倍した配列を作成する
let numbers = [1, 2, 3, 4, 5];
let doubledNumbers = numbers.map(x => x * 2);
console.log(doubledNumbers); // [2, 4, 6, 8, 10]

filter関数

filter関数は、配列やリストの要素に対して、指定した条件に一致するものだけを抽出した新しい配列を作成します。

Python

# 1から10までの数字のうち、偶数だけを抽出する
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4, 6, 8, 10]

JavaScript

// 1から10までの数字のうち、偶数だけを抽出する
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let evenNumbers = numbers.filter(x => x % 2 === 0);
console.log(evenNumbers); // [2, 4, 6, 8, 10]

reduce関数

reduce関数は、配列やリストの要素に対して、指定した関数を使って単一の値にまとめることができます。

Python

# 1から10までの数字を合計する
from functools import reduce
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sum_of_numbers = reduce(lambda x, y: x + y, numbers)
print(sum_of_numbers) # 55

JavaScript

// 1から10までの数字を合計する
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let sumOfNumbers = numbers.reduce((x, y) => x + y);
console.log(sumOfNumbers); // 55

PythonとJavaScriptで大きな違いはないのだが、Pythonの場合は第一引数にlambdaを用いた条件式を書くのが特徴で、Javascriptは基本的には配列をメソッドチェーンで繋いでいく形になります。Pythonの場合、mapやfilterはlist型ではないので、listとして使いたい場合などにはキャストする必要もあるのが注意点。

Discussion