Создавайте и храните различные массивы в каждом объекте

#javascript #arrays #json #api #object

Вопрос:

Я новичок в программировании на JS и разрабатываю приложение для поиска сайтов по округам (это будет что-то вроде штата) и муниципалитетам (округам).

Из данных, которые я получаю через API, я получаю следующие результаты.

данные из API

Как вы можете видеть, есть несколько округов, которые повторяются, и то, что меня интересует, — это присвоить округ объекту и внутри этого объекта создать массив с его муниципалитетами.

На данный момент я удалил повторяющиеся округа, но я не могу поместить каждый объект со своими муниципалитетами.

API для массива

Мой код заключается в следующем: в основном то, что я здесь делаю, — это удаляю повторяющиеся данные из округов.

(переменные данные-это значения из рисунка API 1)

 for(let i=0; i< data.length; i  )
{
    let found = false;
    for (var j=0; j<array.length; j  ) {
        if (data[i].nom_comarca == array[j].comarca) {
            municipis.push(data[i].municipi)
            found = true;
            break;
        }
    }
    if(!found) // If not find we add into Array
    {
        array.push({
            comarca : data[i].nom_comarca,
            municipis: municipis
        })
        //municipis = [];
    }
}
 

Спасибо за все, правда!!

Комментарии:

1. Я бы воспользовался словарем. Ket-это округ, а его значение-массив. Таким образом, вы повторяете свои данные и добавляете округ в словарь, если он не существует. Затем вы добавляете массив в качестве его значения и добавляете municipi. На следующих итерациях, если округ уже есть в вашем словаре, вы просто добавляете в массив municipi.

Ответ №1:

Использование словаря для отслеживания дубликатов nom_comarca. Преобразуйте свойство municipi в массив, если элемент еще не существует, в противном случае переместите значение municipi в массив существующего элемента.

 const data = [
  {"nom_comarca": "1", "municipi": "1"},
  {"nom_comarca": "1", "municipi": "2"},
  {"nom_comarca": "2", "municipi": "3"},
];

const result = Object.values(data.reduce((acc, el) => {
  if (!acc[el.nom_comarca]) {
    acc[el.nom_comarca] = {...el, municipi: [el.municipi]};
  } else {
    acc[el.nom_comarca].municipi.push(el.municipi);
  }
  return acc;
}, {}));

console.log(result); 

Комментарии:

1. Что? Ты гений, ты решил то, над чем я работал более 3 часов и думал о том, как это сделать. БОЛЬШОЕ ВАМ СПАСИБО!