gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:47:08 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com