次のようなオブジェクトがあるとしましょう。
{
prop1: false,
prop2: false,
prop3: false
}
そしてこのように見える別のオブジェクト:
{
prop1: false,
prop2: true,
prop3: false
}
ここで、違いはprop2
プロパティ内にあります。 2つのオブジェクトを比較し、異なる値のプロパティを見つけて、プロパティ名(この場合はprop2
)を返す方法またはライブラリ(Vanillaを推奨)はありますか?
Lodashでdifference関数とdifferenceBy関数を使用しようとしましたが、成功しませんでした。どんな助けや提案も大歓迎です!
等しくない値をチェックすることで、キーをフィルタリングできます(同じキーを想定)。
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);
この関数は、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);
}