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

JavaScriptでundefinedの値を無視して2つのオブジェクトをマージする方法

ここでは、次のような2つのオブジェクトAとBがあると仮定します。

const A = { activity: 'purchased', count: undefined, time: '09:05:33' };
const B = { activity: 'purchased', count: '51', time: undefined };

求められているのは、これら2つのオブジェクトをマージするJavaScript関数を作成することです。ただし重要な条件として、あるキーにtruthy(真と評価される)な値が存在する場合は、falsy(偽と評価される)な値によって上書きされないようにする必要があります。

なぜスプレッド演算子だけでは不十分なのか

単純にスプレッド演算子(...)を使ってマージすると、後ろのオブジェクトの値が常に優先されるため、値がtruthyかfalsyかは考慮されません。つまり、{ ...A, ...B }のように記述すると、B側のundefinedがA側の有効な値を上書きしてしまう可能性があります。

そこで、各キーを反復処理しながら値を判定するアプローチを採用します。

実装例

以下がコード例です。

const A = { activity: 'purchased', count: undefined, time: '09:05:33' };
const B = { activity: 'purchased', count: '51', time: undefined };
const mergeObject = (A, B) => {
   let res = {};
   Object.keys({...A, ...B}).map(key => {
      res[key] = B[key] || A[key];
   });
   return res;
};
console.log(mergeObject(A, B));

コードのポイント

  • Object.keys({...A, ...B})により、両方のオブジェクトに含まれるすべてのキーを取得します。
  • B[key] || A[key]という論理OR演算子の評価により、Bの値がfalsy(undefinednull、空文字など)の場合は自動的にAの値が採用されます。

出力結果

コンソールには以下の出力が表示されます。

{ activity: 'purchased', count: '51', time: '09:05:33' }

このように、countはBの有効な値'51'が採用され、timeはBのundefinedが無視されてAの'09:05:33'が使われていることがわかります。

  1. 【JavaScript入門】2つのオブジェクトを比較する方法をわかりやすく解説

    JavaScriptにおいて、オブジェクトは配列や文字列とは異なる性質を持っています。そのため、「===」や「==」といった演算子で単純に比較することはできません。オブジェクト同士を比較するには、まず文字列化(stringify)を行い、その結果を等価演算子で比較する必要があります。 次の例では、まずオブジェクトをJSON.stringify()で文字列化してから、互いに比較しています。 例 <html> <body> <script> const obj1 = {Name: "Rahim", City: '

  2. JavaScriptで2つのオブジェクトをマージする方法を解説

    JavaScriptでは、スプレッド構文(...)を使うことで、2つのオブジェクトを簡単に1つにマージ(結合)できます。各オブジェクトの前に「...」を付けて新しいオブジェクトリテラル内に展開するだけで、すべてのプロパティが統合されたオブジェクトが生成されます。以下に、2つのJavaScriptオブジェクトをマージするコードの例を示します。コード例<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=dev