JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript】オブジェクトの配列から特定の名前に紐づくユーザーIDをすべて取得する方法

JavaScriptでは、ユーザー名と一意のIDをマッピングしたオブジェクトの配列を扱う場面はよくあります。例えば、次のような配列を考えてみましょう。

const arr = [
    {"4": "Rahul"},
    {"7": "Vikram"},
    {"6": "Rahul"},
    {"3": "Aakash"},
    {"5": "Vikram"}
];

この配列を見ると分かるように、同じ名前が複数のIDに紐づくことはあっても、1つのIDが複数の名前に対応することはありません

実現したいこと

ここで作成するのは、以下のような仕様の関数です。

  • 第1引数: オブジェクトの配列を受け取る
  • 第2引数: 検索対象となる名前の文字列を受け取る
  • 戻り値: 第2引数で指定した名前に紐づくすべてのIDを格納した配列を返す

実装例(forループを使う方法)

まずは、forループを使った基本的な実装から見ていきましょう。

const arr = [
    {"4": "Rahul"},
    {"7": "Vikram"},
    {"6": "Rahul"},
    {"3": "Aakash"},
    {"5": "Vikram"}
];
const name = 'Vikram';
const findUserId = (arr, name) => {
    const res = [];
    for(let i = 0; i < arr.length; i++){
        const key = Object.keys(arr[i])[0];
        if(arr[i][key] !== name){
            continue;
        };
        res.push(key);
    };
    return res;
};
console.log(findUserId(arr, name));

コードの解説

  • Object.keys() を使って、各オブジェクトのキー(つまりID)を取得します。各オブジェクトはキーを1つしか持たないため、[0] で最初の要素を取り出せば十分です。
  • オブジェクトの値が検索対象の名前と一致しない場合は continue で次の要素へスキップします。
  • 一致した場合のみ、そのキー(ID)を結果配列 res に追加します。
  • ループが完了したら、収集したIDの配列を返します。

出力結果

上記のコードを実行すると、コンソールには次のように出力されます。

['7', '5']

'Vikram' という名前に紐づくIDは '7' と '5' の2つであるため、正しく両方が取得できていますね。

別解:filterとmapを組み合わせたモダンな書き方

forループを使わず、filter()map() を組み合わせることで、より宣言的で読みやすいコードに書き換えることもできます。

const findUserId = (arr, name) =>
    arr
        .filter(obj => Object.values(obj)[0] === name)
        .map(obj => Object.keys(obj)[0]);

console.log(findUserId(arr, 'Vikram')); // ['7', '5']

この方法では、まず filter() で名前が一致するオブジェクトだけを抽出し、続いて map() でそれらのキー(ID)だけを取り出しています。処理の意図がひと目で分かるため、チーム開発などでも可読性の高いコードと言えるでしょう。

  1. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g

  2. JavaScriptでオブジェクトを新しい配列に変換する方法

    JavaScriptでは、オブジェクトのプロパティやネストされたデータを取り出し、扱いやすい形で新しい配列にフォーマットできます。本記事では、学校(school)オブジェクトに含まれる生徒情報を、文字列形式の配列へ変換する実践的なコード例を紹介します。 ポイントとなるテクニック このサンプルでは、以下の2つのJavaScript機能を活用しています。 分割代入(Destructuring assignment):オブジェクトから特定のプロパティを簡潔に取り出す構文です。 for...of ループ:配列内の各要素を順番に処理するために使用します。 コード例 <!DOCTYPE html