JavaScriptで他のプロパティ値に基づいてオブジェクト配列を新しい配列へマップする方法
例えば、次のようなオブジェクトの配列があるとしましょう。各オブジェクトは「country(国名)」と「count(出現回数)」という2つのプロパティを持っています。
const arr = [{
country: "canada",
count: 2
}, {
country: "jamaica",
count: 2
}, {
country: "russia",
count: 1
}, {
country: "india",
count: 3
}, {
country: "spain",
count: 2
}, {
country: "portugal",
count: 1
}, {
country: "italy",
count: 1
}];
今回の課題は、この配列を受け取り、各オブジェクトの「count」プロパティの値の回数だけ、対応する国名を繰り返し格納した文字列の配列を返す関数を作成することです。
したがって、この関数から期待される出力は以下のようになります。
['canada', 'canada', 'jamaica', 'jamaica', 'russia', 'india', 'india', 'india', 'spain', 'spain', 'portugal', 'italy']
それでは、この関数のコードを書いていきましょう。ここでは Array.prototype.reduce() メソッドを使用します。reduce() を使うことで、初期値として空の配列を用意し、ループ処理しながら要素を蓄積していくことができます。
コード例
const arr = [{
country: "canada",
count: 2
}, {
country: "jamaica",
count: 2
}, {
country: "russia",
count: 1
}, {
country: "india",
count: 3
}, {
country: "spain",
count: 2
}, {
country: "portugal",
count: 1
}, {
country: "italy",
count: 1
}];
const repeatCount = (arr) => {
return arr.reduce((acc, val) => {
let { count, country } = val;
while(count--){
acc.push(country);
}
return acc;
}, []);
};
console.log(repeatCount(arr));
実行結果
コンソールには以下のように出力されます。
[ 'canada', 'canada', 'jamaica', 'jamaica', 'russia', 'india', 'india', 'india', 'spain', 'spain', 'portugal', 'italy' ]
コードの解説
このコードでは、まず分割代入(Destructuring)を使って各オブジェクトから count と country の値を取り出しています。そして while(count--) ループにより、count の値が0になるまで国名をアキュムレータ(acc)に追加していきます。すべての要素に対してこの処理が完了すると、国名が指定回数分繰り返された新しい配列が完成します。
-
JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説
JavaScriptにおいて、Array.map()は配列の各要素に関数を適用し、その結果を新しい配列として返すメソッドです。一方、オブジェクトには直接map()メソッドが用意されていないため、Object.keys().map()という形で、まずObject.keys()を使ってオブジェクトのキーを配列として取得し、そこにmap()を適用するのが一般的なテクニックとなります。 この記事では、両者の使い方の違いを、実際に動作するサンプルコードと実行結果をもとにわかりやすく解説します。 サンプルコード 以下は、Object.keys().map()とArray.map()の動作を比較できるJa
-
JavaScriptで配列内オブジェクトのプロパティ名を置き換える方法
JavaScriptでオブジェクト配列のプロパティ名を置き換える方法 JavaScriptでは、map()メソッドを活用することで、配列に含まれる各オブジェクトのプロパティ名を別の名前に簡単に置き換えることができます。map()は元の配列を変更せずに新しい配列を生成するため、安全かつ効率的なデータ変換処理に適しています。 以下は、オブジェクト配列のプロパティ名 name を fullName に置き換えるサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta