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

JavaScriptで点数配列から順位を求める方法

問題の概要

数値の配列 arr を唯一の引数として受け取るJavaScript関数を作成します。この配列には、ある学生たちが獲得した点数が格納されています。

私たちの関数は、点数配列をもとに、各学生の順位を対応する位置に格納した配列を作成し、返す必要があります。点数が高いほど順位は上位となり、配列内で最も高い点数を持つ要素には「1」が割り当てられ、2番目に高い点数には「2」が割り当てられる、という仕組みです。

入力例

const arr = [50, 47, 39, 32, 31];

出力例

const output = [1, 2, 3, 4, 5];

出力の解説

この例では、配列 arr 内の点数がすでに降順(高い順)に並んでいます。つまり、最も高い点数が最初のインデックスに配置されており、以降も降順で並んでいるため、出力される順位もそのまま 1, 2, 3, 4, 5 となります。

解決アプローチ

この問題は以下の手順で解決できます。

  1. 元の配列をコピーし、降順にソートした配列を作成します。
  2. 元の配列の各要素について、ソート済み配列内でのインデックス位置を検索します。
  3. インデックスに1を加えた値が、その点数の順位になります。

実装コード

以下が実際のコードです。

const arr = [50, 47, 39, 32, 31];
const findRanks = (arr = []) => {
    const { length } = arr;
    // 元の配列をコピーして降順にソート
    let sortArray = arr.slice();
    sortArray.sort((a, b) => b - a);
    const result = [];
    for (let i = 0; i < length; i++) {
        // ソート済み配列での位置を取得して順位を算出
        const j = sortArray.indexOf(arr[i]);
        result.push(j + 1);
    }
    return result;
};
console.log(findRanks(arr));

実行結果

コンソールに出力される結果は以下のとおりです。

[ 1, 2, 3, 4, 5 ]

補足:同点の場合の扱い

なお、上記のコードでは同点の点数が存在する場合、両方に同じ順位ではなく連続した順位が割り当てられます。もし競技のような「同順位ルール」(1位が2人いたら次は3位)を実装したい場合は、indexOf の代わりに、自分より高い点数の個数を数える方式を採用するとよいでしょう。

const findRanksStrict = (arr = []) =>
    arr.map((score) =>
        arr.filter((s) => s > score).length + 1
    );

このように、要件に応じて順位付けのロジックを使い分けることができます。

  1. JavaScriptで配列を空にする方法まとめ【3つの手法と使い分けのポイント】

    JavaScriptで配列を空にする(初期化する)方法は複数あります。それぞれの手法には特徴や注意点があり、状況に応じて適切に使い分けることが重要です。この記事では、代表的な3つの方法と、それぞれのメリット・デメリットを詳しく解説します。まず、以下のような配列があると仮定します。let arr = [1, test, {}, 123.43];方法1:新しい空の配列で置き換えるarr = [];変数arrに新しい空の配列を再代入する方法です。最もシンプルかつ高速な手法として知られています。ただし注意点として、元の配列への参照がプログラムの他の場所に存在する場合、それらの参照は自動的に更新されませ

  2. JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介

    JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の