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

JavaScriptでオブジェクトから上位n個の値を取得する方法

ここでは、サッカー選手のさまざまな能力値を表す、次のようなオブジェクトを例に考えてみましょう。

const qualities = {
    defence: 82,
    attack: 92,
    heading: 91,
    pace: 96,
    dribbling: 88,
    tenacity: 97,
    vision: 91,
    passing: 95,
    shooting: 90
};

目標は、このようなオブジェクトと数値 n(n はオブジェクトのキー数以下)を受け取り、値が大きい順に n 個のキーと値のペアを持つ新しいオブジェクトを返す関数を作成することです。

たとえば n = 2 の場合、期待される出力は次のとおりです。

{
    tenacity: 97,
    pace: 96
}

実装コード

それでは、この関数の完全なコードを見ていきましょう。

const qualities = {
    defence: 82,
    attack: 92,
    heading: 91,
    pace: 96,
    dribbling: 88,
    tenacity: 97,
    vision: 91,
    passing: 95,
    shooting: 90
};
const pickHighest = (obj, num = 1) => {
    const requiredObj = {};
    if(num > Object.keys(obj).length){
        return false;
    };
    Object.keys(obj).sort((a, b) => obj[b] - obj[a]).forEach((key, ind) =>
    {
        if(ind < num){
            requiredObj[key] = obj[key];
        }
    });
    return requiredObj;
};
console.log(pickHighest(qualities, 3));

コードの解説

この pickHighest 関数の処理の流れは、以下の3ステップです。

  • 引数のチェック: 第2引数 num がオブジェクトのキー数より大きい場合は、false を返して処理を終了します。なお、num が省略された場合のデフォルト値は 1 です。
  • 降順に並べ替え: Object.keys() でキーの配列を取得し、sort() の比較関数 (a, b) => obj[b] - obj[a] によって、対応する値の大きい順(降順)に並べ替えます。
  • 上位n個を抽出: forEach() で並べ替えた配列を走査し、インデックスが num 未満の要素だけを新しいオブジェクト requiredObj に格納します。

実行結果

コンソールには次のように出力されます。

{ tenacity: 97, pace: 96, passing: 95 }
{ tenacity: 97 }
{ tenacity: 97, pace: 96, passing: 95, attack: 92, heading: 91 }

これらはそれぞれ、n = 3n = 1(デフォルト値)、n = 5 を指定した場合の出力例です。いずれの場合も、値が大きい順に指定した個数分のキーと値のペアが正しく取得できていることがわかります。

  1. JavaScriptのRegExp(正規表現)オブジェクトとは?基本の使い方をわかりやすく解説

    RegExp(正規表現)オブジェクトは、テキストに対してパターンマッチングを行い、目的の文字列部分を検索・抽出するために使用されます。JavaScriptでは、RegExpオブジェクトを「RegExpコンストラクタ」または「リテラル構文」の2通りの方法で作成できます。 RegExpオブジェクトの作成方法 コンストラクタを使用する場合: new RegExp(pattern) リテラル構文を使用する場合: /pattern/ 主なメソッド test():文字列がパターンに一致するかどうかを真偽値(true / false)で返します。 exec():パターンに一致した文字列を返します。

  2. JavaScriptのオブジェクト初期化子とは?使い方をサンプルコードで解説

    オブジェクト初期化子とは オブジェクト初期化子(Object Initializer)は、新しく生成したオブジェクトを初期化するための式です。波括弧 {} の中に、「プロパティ名」と「それに対応する値」のペアを0個以上、カンマ区切りで列挙して記述します。 これにより、変数宣言と同時にオブジェクトの中身を簡単に定義することができます。 以下は、JavaScriptでオブジェクト初期化子を使用したサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta chars