Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 迭代并更改JSON中给定字段的所有匹配项_Javascript_String_Function_Object_Ecmascript 6 - Fatal编程技术网

Javascript 迭代并更改JSON中给定字段的所有匹配项

Javascript 迭代并更改JSON中给定字段的所有匹配项,javascript,string,function,object,ecmascript-6,Javascript,String,Function,Object,Ecmascript 6,我有一个JSON对象。 我需要更改给定字段的所有出现值。 例如: { email:"aaa@bbb.com", person: { email:"dfd@ffds.com" }, mother: { name: "AAA", email:"fdsfd@fdsfsd.com", friend: { email:"fdsd@gfsgf.com" } } } 我需要找到所有电子邮件字段,并

我有一个
JSON
对象。
我需要更改给定字段的所有出现值。
例如:

{
  email:"aaa@bbb.com",
  person: {  
    email:"dfd@ffds.com"  
  },  
  mother: {  
    name: "AAA",  
    email:"fdsfd@fdsfsd.com",  
    friend: {  
      email:"fdsd@gfsgf.com"  
    }
  }  
 } 
我需要找到所有
电子邮件
字段,并根据它们的
更改它们的

我知道如何迭代JSON的一个级别,但我不知道如何迭代所有级别


谢谢!:-)

使用与我的答案相同的递归函数,只需稍加修改即可:

function changeEmail(obj, newEmail) {
  Object.keys(obj).forEach(key => {
    if (key == "email") {
      obj[key] = newEmail;
    }
    if (typeof obj[key] == "object") {
      changeEmail(obj[key], newEmail);
    }
  });
}

首先,这不是一个
JSON
对象,而是一个简单的JavaScript对象

然后,您可以使用递归循环所有
对象
级别,并检查迭代的
属性
是否包含
对象
,以便再次处理它,否则如果它是
电子邮件
,请更改它

function process(obj) {
  for (var key in obj) {
    if (typeof obj[key] == 'object') {
      process(obj[key]);
    } else if (key == "email") {
      obj[key] = "new email value";
    }
  }
}
注意:

我使用字符串
“new email value”
作为
email
的新值,但您可以使用所需的
值对其进行相应更改

演示:

var数据={
电子邮件:“aaa@bbb.com",
人:{
电子邮件:“dfd@ffds.com"
},
母亲:{
名称:“AAA”,
电子邮件:“fdsfd@fdsfsd.com",
朋友:{
电子邮件:“fdsd@gfsgf.com"
}
}
}
功能过程(obj){
for(obj中的var键){
如果(对象的类型[键]=“对象”){
过程(obj[关键]);
}否则如果(键==“电子邮件”){
obj[key]=“新邮件值”;
}
}
}
过程(数据);

控制台日志(数据)根据其值更改其值???可能重复@ellipsis是的,我想获取给定的电子邮件值并根据其值进行更改。例如
如果(电子邮件=='abc@xyz.com“){email=”pqr@xyz.com“}