1.2*_*tts 7 javascript properties ecmascript-6
ES6 有很多功能,包括赋值等。但是有没有一种方法可以获取从一个对象到另一个对象不同的属性列表?
例如,如果我有一个具有两种状态的组件。默认状态有 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);
Run Code Online (Sandbox Code Playgroud)
更新:
很好的答案。我不够具体......如果 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);
Run Code Online (Sandbox Code Playgroud)
不必是 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);Run Code Online (Sandbox Code Playgroud)
还包括添加的属性
PS使用 Object.is 绕过 NaN 问题