gpt4 book ai didi

javascript - 有没有办法使用 ES2105 中的对象解构来 trim 对象?

转载 作者:行者123 更新时间:2023-12-03 07:38:18 25 4
gpt4 key购买 nike

目前,当我想要 trim 一个对象(例如,一个具有我不想发送给客户端的详细信息的用户对象)时,我一直在复制如下属性:

let user = db.findUser(_id);
//user = { username: "John", hashedPassword: "ashHDhadh23hfJAd", email: "John@doe.com", created: "<some date>" ... }
let forClient = {
username: user.username,
email: user.email
}
...

我正在学习如何在 ES2015 中解构对象,似乎可以更干净地完成此操作。是吗?

最佳答案

如果不引入开销,解构在这里没有帮助。它简化了从对象创建变量的过程,也就是说,如果您在这里使用它,则会产生如下结果:

let { username, email } = user;
let forClient = { username, email };

但正如您所看到的,这会添加新变量并重复代码。

您可以考虑使用reduce来选择想要的字段:

let forClient = ['username', 'email'].reduce((v, k) => { v[k] = user[k]; return v }, {});

...或者使用高阶函数来不重复太多代码:

const selectFrom = (obj) => (v, k) => { v[k] = obj[k]; return v };

let userForClient = ['username', 'email'].reduce(selectFrom(user), {});
let postForClient = ['title', 'summary'].reduce(selectFrom(blogpost), {});
// etc.

...或者只是将这样的函数添加到您的库中,该函数使用 rest spread operator简单使用:

function pruneObject(obj, ...fields) {
let pruned = {};
fields.forEach(f => pruned[f] = obj[f]);
return pruned;
}

let forClient = pruneObject(user, 'username', 'email');

关于javascript - 有没有办法使用 ES2105 中的对象解构来 trim 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35516179/

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