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

JavaScriptでキー値を使って2つのオブジェクトから新しいオブジェクトを作成する方法

次のような2つのオブジェクトがあるとします。

const obj1 = {
  positive: ['happy', 'excited', 'joyful'],
  negative: ['depressed', 'sad', 'unhappy']
};
const obj2 = {
  happy: 6,
  excited: 1,
  unhappy: 3
};

ここで求められているのは、これら2つのオブジェクトを引数として受け取るJavaScript関数です。この関数は、obj1の各カテゴリ(positive / negative)に含まれる単語をキーとしてobj2から対応するスコアを取得し、その合計値を計算して、次のようなオブジェクトを返す必要があります。

const output = {positive: 7, negative: 3};

解決策:reduce()メソッドを使った実装例

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

const obj1 = {
  positive: ['happy', 'excited', 'joyful'],
  negative: ['depressed', 'sad', 'unhappy']
};
const obj2 = {
  happy: 6,
  excited: 1,
  unhappy: 3
};

const findPositiveNegative = (obj1 = {}, obj2 = {}) => {
  const result = {};
  for (let key of Object.keys(obj1)) {
    result[key] = obj1[key].reduce((acc, value) => {
      return acc + (obj2[value] || 0);
    }, 0);
  }
  return result;
};

console.log(findPositiveNegative(obj1, obj2));

コードの解説

この関数の処理の流れは以下の通りです。

  • Object.keys(obj1):obj1のキー("positive" と "negative")を配列として取得し、for...ofループで順番に処理します。
  • reduce():各キーに対応する単語の配列(例:['happy', 'excited', 'joyful'])を走査し、それぞれの単語をキーとしてobj2からスコアを取り出して合計していきます。
  • obj2[value] || 0:obj2に存在しない単語('joyful'、'depressed'、'sad'など)はスコア0として扱われます。これにより、該当データがない場合でもエラーにならず、安全に計算を行えます。

出力結果

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

{ positive: 7, negative: 3 }

この結果から、"positive" カテゴリでは happy(6点)と excited(1点)が該当して合計7点、一方 "negative" カテゴリでは unhappy(3点)のみ該当して合計3点となっていることが分かります。この手法は感情分析やスコア集計など、カテゴリごとの数値を効率的に集計したい場面で幅広く活用できる便利なパターンです。

  1. JavaScriptでURLオブジェクトを作成する方法をわかりやすく解説

    JavaScriptでは、標準組み込みのURLコンストラクタを使うことで、URL文字列からURLオブジェクトを簡単に生成できます。URLオブジェクトを作成すると、プロトコル(protocol)やホスト名(host)、パス(pathname)など、URLを構成する各要素に個別にアクセスできるようになるため、URLの解析や操作がとても便利になります。 URLオブジェクトの作成例 以下は、JavaScriptでURLオブジェクトを作成し、ボタンをクリックするとその各プロパティを画面に表示するサンプルコードです。 <!DOCTYPE html> <html lang="

  2. JavaScriptでオブジェクトの値を取得する方法:Object.values()と_.values()の違いを解説

    JavaScriptにはObject.values()など、オブジェクトの値を取得するためのメソッドがいくつか用意されています。しかし、これらの標準メソッドでは値を取り出すまでの手順がやや長くなりがちです。そこで便利なのが、JavaScriptライブラリ「Underscore.js」が提供する_.values()メソッドです。このメソッドを使えば、forループを記述することなく、オブジェクトの値を直接取得できます。 Object.values()を使った例 まずは標準メソッドであるObject.values()を使った例です。このメソッドで取得した値を順番に表示するには、for...ofループ