Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换Javascript中的对象属性?_Javascript_Object - Fatal编程技术网

如何替换Javascript中的对象属性?

如何替换Javascript中的对象属性?,javascript,object,Javascript,Object,我已经在这个问题上纠缠了一段时间,经过各种尝试后,我决定是时候寻求一些帮助了 问题是: 创建一个名为changeEmail的函数,该函数接收一个用户对象和一个新的电子邮件字符串。 用newEmail字符串替换用户的当前电子邮件地址(分配给email属性),然后返回更新的用户对象 这是我的代码 var用户={ 姓名:“约翰·多伊”, 电子邮件:“johndoe@gmail.com" }; 功能更改电子邮件(参数1){ param1=param1.email.replace(“johndoe”、“

我已经在这个问题上纠缠了一段时间,经过各种尝试后,我决定是时候寻求一些帮助了

问题是: 创建一个名为changeEmail的函数,该函数接收一个用户对象和一个新的电子邮件字符串。 用newEmail字符串替换用户的当前电子邮件地址(分配给email属性),然后返回更新的用户对象

这是我的代码

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我冒昧地引用了作业的其他两部分。如果你不喜欢编辑,请随意回滚。对不起,我错了