Итерация и изменение всех вхождений данных полей в JSON - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть JSON объект.
Мне нужно изменить значения всех вхождений данного поля этого поля.
Например:

{
  email:"aaa@bbb.com",
  person: {  
    email:"dfd@ffds.com"  
  },  
  mother: {  
    name: "AAA",  
    email:"fdsfd@fdsfsd.com",  
    friend: {  
      email:"fdsd@gfsgf.com"  
    }
  }  
 } 

Мне нужно найти все email полей и измените их values на основе их values.

Я знаю, как перебирать один уровень JSON, я не знаю, как перебирать все уровни.

Спасибо!: -)

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Прежде всего, это не объект JSON, это простой объект JavaScript.

Затем вы можете использовать рекурсию для циклического прохождения всех уровней object и проверить, содержит ли повторное значение property значение object, поэтому обработайте его снова, если оно равно email, поэтому измените его.

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, но вы можете изменить ее в соответствии с желаемым value.

Демонстрация:

var data = {
  email: "aaa@bbb.com",
  person: {
    email: "dfd@ffds.com"
  },
  mother: {
    name: "AAA",
    email: "fdsfd@fdsfsd.com",
    friend: {
      email: "fdsd@gfsgf.com"
    }
  }
}

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";
    }
  }
}
process(data);
console.log(data);
0 голосов
/ 28 февраля 2019

Используйте ту же рекурсивную функцию стиля, что и в моем ответе здесь , просто слегка ее измените:

function changeEmail(obj, newEmail) {
  Object.keys(obj).forEach(key => {
    if (key == "email") {
      obj[key] = newEmail;
    }
    if (typeof obj[key] == "object") {
      changeEmail(obj[key], newEmail);
    }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...