ES6 有很多函数,包括 assign 等。但是有没有一种方法可以获取从一个对象到下一个对象不同的属性列表?
例如,如果我有一个具有两种状态的组件。默认状态有 100 个定义它的属性。状态二只有 10 个属性发生变化。假设我得到 2 个包含所有 100 个属性的对象。我想创建对象 3,它只有 10 个已更改的属性(实际上不仅是更改的属性,还有第二个对象的属性 - 请参阅更新)。
第二个对象保留其所有唯一属性并覆盖第一个对象中的属性。
我以为 Object.assign()
可能会这样做,但我不这么认为。
var object = {name:Fred, age: 20, weight: 100};
var object2 = {name:Fred, age: 21, weight: 120};
function getChangesFromObjectTwo(object1, object2) {
return object;
}
// returns {age:21, weight: 120};
var changes = getChangesFromObjectTwo(object, object2);
更新:
很好的答案。我不够具体...如果 object2 具有其他属性,它们应该显示在返回的对象上。
var object = {name:Fred, age: 20, weight: 100};
var object2 = {name:Fred, age: 21, weight: 120, height: 70};
function getChangesFromObjectTwo(object1, object2) {
return object;
}
// returns {age:21, weight: 120, height: 70};
var changes = getChangesFromObjectTwo(object, object2);
最佳答案
不一定是 ES6,但你可以像这样实现它:
var object = {name: 'Fred', age: 20, weight: 100};
var object2 = {name: 'Fred', age: 21, weight: 120, height: 70};
function getChangesFromObjectTwo(source, target) {
return Object.fromEntries(Object.entries({...source, ...target})
.filter(([key, value]) => !Object.is(source[key], value)));
}
// returns {age:21, weight: 120};
var changes = getChangesFromObjectTwo(object, object2);
console.log(changes);
还包括添加的属性
P.S. Using Object.is to bypass NaN problem
关于javascript - 是否有一个 ES6 函数会返回一个包含属性更改的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61997142/