javascript - 是否有一个 ES6 函数会返回一个包含属性更改的对象?

标签 javascript ecmascript-6 properties

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/

相关文章:

javascript - 如何在JS中定义属性别名?

javascript - 序列化表单,排除特定类

javascript - 同一选择器上的多个 Html 方法

javascript - Node.js - 语法错误 : Unexpected token import while running on node 6. 10.2

javascript - 在 HTML 中内联 ECMAScript 模块

c# - 类属性,在内部可获取和可设置,但只能在外部获取

c# - .NET 字典作为属性

javascript - 如何抑制 "{variable} is better written in dot notation."

javascript - Jquery/PHP : Javascript function fails to run

Javascript:生成随机漂亮的饱和颜色(选定的调色板)