q150509-2
by jun68ykt
HTML
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
JavaScript
// 更新前のオブジェクト
const objectA = {
id: 1,
description: "製品Aです。",
images: [
"1.jpg",
"2.jpg",
"3.jpg",
],
metadata: {
product_id: 6735,
options: [
"color",
"size",
]
},
name: "製品A",
active: false,
created: 1511420673,
updated: 1528145536,
};
// 更新後のオブジェクト
const objectB = {
id: 1,
description: "製品Bになりました。",
images: [
"5.jpg",
],
metadata: {
product_id: 6735,
options: [
"size",
]
},
name: "製品B",
active: true,
created: 1511420673,
updated: 1528145599,
};
// 更新されたプロパティの配列を得る。(https://stackoverflow.com/a/31686152)
const diffProps = _.reduce(objectA, function(result, value, key) {
return _.isEqual(value, objectB[key]) ?
result : result.concat(key);
}, []);
console.log(diffProps);
// 値が更新されたプロパティと、それらのobjectBでの値を持つオブジェクトを作成
const diffObj = diffProps.reduce((obj, prop) => {
obj[prop] = objectB[prop];
return obj;
}, {});
console.log(diffObj);