如何替换Javascript中的对象属性?
我已经在这个问题上纠缠了一段时间,经过各种尝试后,我决定是时候寻求一些帮助了 问题是: 创建一个名为changeEmail的函数,该函数接收一个用户对象和一个新的电子邮件字符串。 用newEmail字符串替换用户的当前电子邮件地址(分配给email属性),然后返回更新的用户对象 这是我的代码如何替换Javascript中的对象属性?,javascript,object,Javascript,Object,我已经在这个问题上纠缠了一段时间,经过各种尝试后,我决定是时候寻求一些帮助了 问题是: 创建一个名为changeEmail的函数,该函数接收一个用户对象和一个新的电子邮件字符串。 用newEmail字符串替换用户的当前电子邮件地址(分配给email属性),然后返回更新的用户对象 这是我的代码 var用户={ 姓名:“约翰·多伊”, 电子邮件:“johndoe@gmail.com" }; 功能更改电子邮件(参数1){ param1=param1.email.replace(“johndoe”、“
var用户={
姓名:“约翰·多伊”,
电子邮件:“johndoe@gmail.com"
};
功能更改电子邮件(参数1){
param1=param1.email.replace(“johndoe”、“newjohndoe”);
user.email=param1;
返回用户;
}
更改电子邮件(用户);
console.log(用户)代码>参数1是什么?您只需对对象属性进行替换
var user = {name: "John Doe", email: "johndoe@gmail.com"};
// If you want to replace a part of email by another thing:
user.email = user.email.replace("johndoe", "newjohndoe")
// If you just want to setup a new email:
user.email = "newjohndoe@gmail.com
或具有以下功能:
function replaceObjectParam(obj, key, old_value, new_value) {
obj[key] = obj[key].replace(old_value, new_value)
return obj
}
var user = {name: "John Doe", email: "johndoe@gmail.com"};
user = replaceObjectParam(user, 'email, "johndoe", "newjohndoe")
我认为你把它复杂化了。您只需更新属性:
function changeEmail(user,email){
user.email = email;
return user;
}
因此,您可以:
changeEmail({email:"before"},"after");
如果你想用一些ESnext惹恼你的老师:
const changeEmail = (user,email)=>({...user,email});
//(note this does shallow copy)
const user = changeEmail({email:"before"},"after");
事实上,我认为这个作业不是很有用。为什么不简单地:
user.email = "after";
遵照要求
创建一个名为changeEmail的函数,该函数接收用户对象和
新电子邮件字符串
您的changeEmail函数签名应该如下所示
function changeEmail(userObject, emailString) {
}
将用户的当前电子邮件地址(分配给电子邮件属性)替换为新电子邮件字符串
意味着你的功能体可以看起来像:
userObject.email = emailString;
最后
然后返回更新的用户对象
会是
return userObject;
您应该更改属性,而不是参数本身:
param1.email = param1.email.replace("johndoe", "newjohndoe");
您返回的示例中的所有内容都是错误的。
看看这个,
var oldUser = new User("John", "foo@barr.com"); // Assuming you have a User object
function changeEmail(user, newEmail) {
var newUser = new User();
newUser.name = user.name;
newUser.email = newEmail;
return newUser;
}
var updatedUser = changeEmail(oldUser, "barr@foo.com");
您首先要使用旧用户,然后才有更改其电子邮件的功能
当您想要更改他们的电子邮件时,您会传入用户对象和一封新电子邮件。新用户现在位于updateUser
用户对象可以是这样简单的东西
var User = function(name, email) {
this.name = name;
this.email = email;
}
让我们再看看你的问题
创建一个名为changeEmail的函数,它接收用户对象和
新建电子邮件字符串。替换用户的当前电子邮件地址(分配给
电子邮件属性),然后返回更新的电子邮件字符串
用户对象
查看代码时,首先要注意的是,函数
只接受一个参数,而不是两个。这就是为什么它不能满足你的问题。另一个注意事项是,您通常希望以更具描述性的方式命名参数
,因此在函数
中使用这些参数时很有意义
您的更新代码可能如下所示
var user={name:“John Doe”,电子邮件:johndoe@gmail.com"};
功能更改电子邮件(userObj,newEmail){
userObj.email=newEmail
返回userObj;
}
更改电子邮件(用户,“newemail@gmail.com");代码>你的作业本身很好。关注“接收用户对象的函数”和“然后返回更新的用户对象”。所讨论的代码工作得非常好。问题是什么?您的函数不会替换用户电子邮件的一部分,而是替换所有电子邮件对象。@Arthur但这就是分配要求的?替换函数的用法是disturbing@Jonas,我从未见过像这样使用扩展运算符/语法来分解(不可iterable)对象({…user,email})
;当我测试它时,它失败了。你能补充一些参考资料吗?这是实验性的,还是特定于浏览器的功能?我将其写成constchangemail=(用户,email)=>Object.assign(用户,{email})代码>@thomas我冒昧地引用了作业的其他两部分。如果你不喜欢编辑,请随意回滚。对不起,我错了