Удалите Дубликаты из файла Json, используя Javascript - PullRequest
0 голосов
/ 26 июня 2018

У меня есть файл json, как показано ниже (test.json).Я безуспешно пытаюсь проанализировать тестовый массив и удалить дубликаты любого "имени" ниже

      {
    "test": [{
            "name": "jeb",
            "occupation": "teacher"
        },

        {
            "name": "jeb",
            "occupation": "writer"
        },
        {
            "name": "bob",
            "occupation": "skydiver"
        }

    ]
}

. Пока мой код выглядит следующим образом:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        var myObj = JSON.parse(this.responseText);
        var i;
        var test= myObj.test.length;

        for (i=0; i<=myObj.test.length; i++) {
          var name = myObj.test[i].name;
          var occupation = myObj.test[i].occupation;
          console.log(name + " and " + occupation)

        }
      }
}
xmlhttp.open("GET", "test.json", true);
xmlhttp.send();

, и он печатает:

jeb and teacher
jeb and writer
bob and skydiver

Я бы хотел, чтобы конечный результат был:

jeb and teacher, writer
bob and skydiver

Любая помощь приветствуется.Спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

Лучше всего reduce превратить в объект, индексированный name, значение которого представляет собой массив профессий, а затем, как только объект создан, вы можете выполнить итерацию по нему и напечатать профессии каждого имени:

const obj = {
  "test": [{
    "name": "jeb",
    "occupation": "teacher"
  },{
    "name": "jeb",
    "occupation": "writer"
  },{
    "name": "bob",
    "occupation": "skydiver"
  }]
};

const namesByOccupation = obj.test.reduce((a, { name, occupation }) => {
  if (!a[name]) a[name] = [];
  a[name].push(occupation);
  return a;
}, {});
Object.entries(namesByOccupation).forEach(([name, occupations]) => {
  console.log(name + ' and ' + occupations.join(', '));
});
...