web-dev-qa-db-ja.com

javascriptで2つのオブジェクトの違いのプロパティを取得します

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

{
  prop1: false,
  prop2: false,
  prop3: false
}

そしてこのように見える別のオブジェクト:

{
  prop1: false,
  prop2: true,
  prop3: false
}

ここで、違いはprop2プロパティ内にあります。 2つのオブジェクトを比較し、異なる値のプロパティを見つけて、プロパティ名(この場合はprop2)を返す方法またはライブラリ(Vanillaを推奨)はありますか?

Lodashでdifference関数とdifferenceBy関数を使用しようとしましたが、成功しませんでした。どんな助けや提案も大歓迎です!

5
milestrong

等しくない値をチェックすることで、キーをフィルタリングできます(同じキーを想定)。

var obj1 = { prop1: false, prop2: false, prop3: false },
    obj2 = { prop1: false, prop2: true, prop3: false },
    difference = Object.keys(obj1).filter(k => obj1[k] !== obj2[k]);
    
console.log(difference);
15
Nina Scholz

この関数は、2つのオブジェクト間のすべての違いを抽出します。ネストされたオブジェクトでも機能します。

function difference(object, base) {
    function changes(object, base) {
        return _.transform(object, function(result, value, key) {
            if (!_.isEqual(value, base[key])) {
                result[key] = (_.isObject(value) && _.isObject(base[key])) ? changes(value, base[key]) : value;
            }
        });
    }
    return changes(object, base);
}
0
DarkMode