gpt4 book ai didi

javascript - ES6 将一个对象的值分配给另一个对象

转载 作者:行者123 更新时间:2023-12-01 02:23:54 24 4
gpt4 key购买 nike

在使用filter()函数找到我想要为其分配数据的对象后,尝试将一个对象的值分配给另一个对象。我的第一次尝试没有成功,如下所示:

if (this.sets.filter(s => s.id === res.body.last_id).length) {
this.sets.filter(s => s.id === res.body.last_id)[0] = {
id: this.editForm.id,
bid: this.editForm.bid,
budget: this.editForm.budget,
country: this.editForm.country,
desc: this.editForm.desc,
device: this.editForm.device,
profile_id: this.editForm.profile_id,
user_id: this.userId,
widget_list_id: this.editForm.widget_list_id,
widget_type: this.editForm.widget_type
}
}

所以我尝试寻找优雅的解决方案,但我能让逻辑发挥作用的唯一方法是:

if (this.sets.filter(s => s.id === res.body.last_id).length) {
this.sets.filter(s => s.id === res.body.last_id)[0].id = this.editForm.id;
this.sets.filter(s => s.id === res.body.last_id)[0].bid = this.editForm.bid;
this.sets.filter(s => s.id === res.body.last_id)[0].budget = this.editForm.budget;
this.sets.filter(s => s.id === res.body.last_id)[0].country = this.editForm.country;
this.sets.filter(s => s.id === res.body.last_id)[0].desc = this.editForm.desc;
this.sets.filter(s => s.id === res.body.last_id)[0].device = this.editForm.device;
this.sets.filter(s => s.id === res.body.last_id)[0].profile_id = this.editForm.profile_id;
this.sets.filter(s => s.id === res.body.last_id)[0].user_id = this.userId;
this.sets.filter(s => s.id === res.body.last_id)[0].widget_list_id = this.editForm.widget_list_id;
this.sets.filter(s => s.id === res.body.last_id)[0].widget_type = this.editForm.widget_type;
}

我显然一切都那么优雅。知道为什么我的第一次尝试没有成功吗?

最佳答案

Don't repeat yourself !!!对过滤后的数组使用临时变量(这也只执行一次所有过滤):

const lasts = this.sets.filter(s => s.id === res.body.last_id);
if (lasts.length) {
lasts[0].id = this.editForm.id;
lasts[0].bid = this.editForm.bid;
lasts[0].budget = this.editForm.budget;
lasts[0].country = this.editForm.country;
lasts[0].desc = this.editForm.desc;
lasts[0].device = this.editForm.device;
lasts[0].profile_id = this.editForm.profile_id;
lasts[0].user_id = this.userId;
lasts[0].widget_type = this.editForm.widget_type;
lasts[0].widget_list_id = this.editForm.widget_list_id;
}

此外,更多临时变量:

const lasts = this.sets.filter(s => s.id === res.body.last_id);
if (lasts.length) {
const last = lasts[0];
const editForm = this.editForm;
last.id = editForm.id;
last.bid = editForm.bid;
last.budget = editForm.budget;
last.country = editForm.country;
last.desc = editForm.desc;
last.device = editForm.device;
last.profile_id = editForm.profile_id;
last.user_id = this.userId;
last.widget_type = editForm.widget_type;
last.widget_list_id = editForm.widget_list_id;
}

之后,您需要更多地了解内置方法。有Array find method过滤掉单个项目(第一个与谓词匹配的项目)和 Object.assign ,它将所有可枚举属性从一个对象复制到另一个对象(仅当您的 editForm 仅具有您要复制的属性时才有效)。

const last = this.sets.find(s => s.id === res.body.last_id);
if (last) {
Object.assign(last, this.editForm);
last.user_id = this.userId;
}

关于javascript - ES6 将一个对象的值分配给另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971886/

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