javascript - ES6 Spread Operator 将特定键克隆或提取到另一个对象

标签 javascript ecmascript-6

有没有办法用指定的键克隆一个对象。例如你有这个对象

const User = {
  firstName: '',
  lastName: '',
  age: '',
  gender: '',
  job: '',
}

而您只想克隆或提取 firstNamelastName创建另一个对象,例如:

const UserPublicInfo = {
  firstName,
  lastName,
}

我知道一些解决方案,但是......

解决方案#1:手动

const UserPublicInfo = {
  firstName: User.firstName,
  lastName: User.lastName,
}

警告

小列表没有问题,但对于大列表(假设有 10 个以上的键或更多),这会很乏味。

解决方案 #2:Rest 运算符

我们可以使用 Rest Operator 专门省略键

const { firstName, lastName, ...UserPublicInfo } = User

警告

这比第一个解决方案更容易,但问题是如果您不知道 User 的属性怎么办?目的?是的,你可以console.log内容,但如果稍后在您的开发过程中队友更新了此内容怎么办 User对象并决定添加另一个属性,您的应用程序很可能会在此过程中引起错误。所以安全方面Solution #1更好。

我希望它可以像下面的代码一样简单地完成,但它在我的转译器上抛出错误。

const UserPublicInfo = { firstName, lastName } = User

对于这个用例有更好的解决方案吗?

最佳答案

您可以看到this 克隆的实现(但具有 ES6 功能)、Object.Assign() 的思想以及通过 Function.prototype.apply 进行深度克隆:

export class ClonerAssign<T> implements interfaces.ICloner{
        clone<T>(sample: T): T {
            var proto = Object.getPrototypeOf(sample);
            //soft clone
            var _new = Object.assign({}, sample, proto, Object.getPrototypeOf(proto));

            //deep clone
            var _props = props(proto).filter(x => notCoreFunc(x));
            _props.forEach(key => {
                if (typeof proto[key] === 'function') {
                    (_new as any)[key] = (...args: any[]) => {
                        (proto[key] as any).apply(_new, args);
                    };
                }
            });

            return _new;
        }
    }

关于javascript - ES6 Spread Operator 将特定键克隆或提取到另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43471790/

相关文章:

javascript - 我更多地使用 mootools 的哪些模块?

javascript - 如何将对象解构为已定义的变量?

javascript - 从 Java 脚本中的数组列表中排除 ID 列表

javascript - 单击按钮时 Ajax 从 Django 1.9 代码中获取新值

javascript - Polymer 元素未在 Safari 7.0 上呈现

javascript - 同时滚动多个元素

typescript - "... resolves to a non-module entity and cannot be imported using this construct"是什么意思?

javascript - 改变JavaScript中对象的结构

javascript - ES 模块 : deprecate export

javascript - 如何对齐谷歌地图中标记的图标