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

【JavaScript】2つの配列を連結せずに、値が大きい方のオブジェクトを取得する方法

はじめに:連結せずに2つの配列から値が大きいオブジェクトを取得する

2つの配列から特定のプロパティの値が大きい方のオブジェクトを取得したい場合、配列をconcat()などで連結する必要はありません。reduce()メソッドをそれぞれの配列に対して個別に適用すれば、目的の結果を得られます。

ここでは、「生徒名」と「点数」を持つオブジェクトの配列を例に説明します。

var sectionAStudentDetails =
[
    {studentName: 'John', studentMarks: 78},
    {studentName: 'David', studentMarks: 65},
    {studentName: 'Bob', studentMarks: 98}
];
let sectionBStudentDetails =
[
    {studentName: 'John', studentMarks: 67},
    {studentName: 'David', studentMarks: 89},
    {studentName: 'Bob', studentMarks: 97}
];

reduce()を使った実装例

以下のコードでは、両方の配列にreduce()を適用し、点数が高い方のオブジェクトを取得しています。ポイントは、1つ目の配列をreduce()で処理した結果を、2つ目の配列のreduce()の初期値として渡すところです。こうすることで、配列を連結しなくても全体を比較できます。

var sectionAStudentDetails =
[
    {studentName: 'John', studentMarks: 78},
    {studentName: 'David', studentMarks: 65},
    {studentName: 'Bob', studentMarks: 98}
];
let sectionBStudentDetails =
[
    {studentName: 'John', studentMarks: 67},
    {studentName: 'David', studentMarks: 89},
    {studentName: 'Bob', studentMarks: 97}
];
function concatTwoArraysWithoutConcatFunction(arrayValues, k) {
    const previousValue = arrayValues[k.studentName];
    if (!previousValue || k.studentMarks >= previousValue.studentMarks)
        arrayValues[k.studentName] = k;
        return arrayValues;
}
const setionA = sectionAStudentDetails.reduce(concatTwoArraysWithoutConcatFunction, {});
const sectionB = sectionBStudentDetails.reduce(concatTwoArraysWithoutConcatFunction, setionA);
console.log(Object.values(sectionB));

コードの仕組み

コールバック関数は、アキュムレータであるarrayValuesと現在の要素kを受け取ります。previousValueには、同じ生徒名の既存エントリが格納されます。既存エントリが存在しない場合、または新しい点数の方が大きい場合にのみ、オブジェクトが上書きされます。最後にObject.values()を使うことで、オブジェクトの値だけを配列として取り出しています。

プログラムの実行方法

上記のプログラムを実行するには、次のコマンドを使用します。ここではファイル名を「demo84.js」としています。

node fileName.js

出力結果

実行すると、以下のような出力が得られます。

PS C:\Users\Amit\JavaScript-code> node demo84.js
[
    { studentName: 'John', studentMarks: 78 },
    { studentName: 'David', studentMarks: 89 },
    { studentName: 'Bob', studentMarks: 98 }
]

このように、配列を連結せずにreduce()を段階的に適用するだけで、各生徒ごとの最高得点のオブジェクトをひとまとめに取得できることがわかります。

  1. JavaScriptでXMLデータから属性の値を取得する方法

    JavaScriptでXMLデータから属性の値を取得するには、attr()メソッドを使用します。このメソッドは、指定した属性名に対応する値を簡単に取り出すことができる便利な機能です。 attr()メソッドとは attr()はjQueryが提供するメソッドの一つで、XMLやHTML要素から指定した属性の値を取得できます。XMLデータをjQueryオブジェクトとして扱うことで、DOM操作と同じ感覚で属性へアクセスできるのが特徴です。 サンプルコード 以下のコードでは、ゲーム情報を含むXMLデータから「details」属性の値を取得しています。 <!DOCTYPE html> <h

  2. スマホのカメラで物体を識別!おすすめ画像認識アプリ7選

    スマートフォンのカメラは、もはや単に写真を撮るためだけの従来のパーツではありません。ARステッカーを使って画像を面白く演出するなど、今ではさまざまな魅力的な用途に活用されています。顔やジェスチャーを認識してシャッターを切る機能を使っている方もいるでしょう。同様に、最近ではスマホのカメラで「物体そのもの」を識別することも可能になっています。これは、カメラで撮影した被写体に関する情報を調べる際に大いに役立つ便利なテクニックです。ここでは、カメラで物体を識別できるおすすめアプリをご紹介します。 Google Lens(グーグルレンズ) Google Lensは、対応技術を備えたすべてのAndroid