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(undefined、null、空文字など)の場合は自動的にAの値が採用されます。
出力結果
コンソールには以下の出力が表示されます。
{ activity: 'purchased', count: '51', time: '09:05:33' }このように、countはBの有効な値'51'が採用され、timeはBのundefinedが無視されてAの'09:05:33'が使われていることがわかります。
-
【JavaScript入門】2つのオブジェクトを比較する方法をわかりやすく解説
JavaScriptにおいて、オブジェクトは配列や文字列とは異なる性質を持っています。そのため、「===」や「==」といった演算子で単純に比較することはできません。オブジェクト同士を比較するには、まず文字列化(stringify)を行い、その結果を等価演算子で比較する必要があります。 次の例では、まずオブジェクトをJSON.stringify()で文字列化してから、互いに比較しています。 例 <html> <body> <script> const obj1 = {Name: "Rahim", City: '
-
JavaScriptで2つのオブジェクトをマージする方法を解説
JavaScriptでは、スプレッド構文(...)を使うことで、2つのオブジェクトを簡単に1つにマージ(結合)できます。各オブジェクトの前に「...」を付けて新しいオブジェクトリテラル内に展開するだけで、すべてのプロパティが統合されたオブジェクトが生成されます。以下に、2つのJavaScriptオブジェクトをマージするコードの例を示します。コード例<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=dev