Как перебирать несколько массивов внутри объектов в JSON API с помощью JavaScript

#javascript #arrays #json #object #fetch-api

Вопрос:

У меня есть API, из которого я пытаюсь извлекать и отображать данные. Данные, к которым я хочу получить доступ, находятся в массиве «оборудование», как показано ниже.

введите описание изображения здесь

Я пытаюсь перебрать массив «оборудование» для каждого элемента, но у меня проблемы с отображением данных. Я полагаю, что либо не получаю к нему должного доступа, либо где-то не включаю еще один цикл.

Вот что у меня есть до сих пор:

 // Fetch Data
function getData() {
  fetch(url)
    .then((res) => res.json())
    .then((data) => {
      let output = "";
      data.groups.equipments.forEach(function(product) {
        output  = `
          <div class="card">
            <img src=${product.photos.text} alt=${product.model} />
            <h3>${product.year} ${product.manufacturer} ${product.model}</h3>
            <p>${product.hours} hours</p>
            <a href='https://used.battlefieldequipment.ca/en/${product["group-code"]}/${product.equipments["serial-number"]}' class="btn btn-primary">View Details</a>
          </div>         
      `;
      });
      dataOutput.innerHTML = output;
    })
}

getData();
 

Есть идеи, что мне нужно сделать, чтобы это сработало?

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

1. data.groups это тоже массив!

Ответ №1:

Поскольку data.groups это массив, вам сначала нужно просмотреть их, прежде чем обращаться к equipments ним .

Вы также можете перебирать их с помощью a forEach , так что это просто!

 data.groups.forEach(function(group) {
  group.equipments.forEach(product) {
    output  = `
          <div class="card">
            <img src=${product.photos.text} alt=${product.model} />
            <h3>${product.year} ${product.manufacturer} ${product.model}</h3>
            <p>${product.hours} hours</p>
            <a href='https://used.battlefieldequipment.ca/en/${product["group-code"]}/${product.equipments["serial-number"]}' class="btn btn-primary">View Details</a>
          </div>`;
  }
}) 

Ответ №2:

вместо групп.оборудование использует

 groups.map((g) => g.equipments)
 

Ответ №3:

Вы пытаетесь получить equipments свойство массива. Свойство находится в объекте, который находится внутри массива.

 data.groups.forEach(obj => {
  //obj.equipments is what you want now. It returns the equipments property of current object in the loop
})
 

Ответ №4:

Вы должны сделать два шага вперед. Проверьте здесь https://js.do/code/621480

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

Ответ №5:

  const loadApi = async () => {
    let url = await fetch(url)
    let res = await url.json();

    for (const element of res.groups) {
        for (const element2 of element.equipments) {
            getItemsFromProducts(element2);
        }
    }


}; loadApi();


const getItemsFromProducts = (data) => {
    let demo = document.getElementById('demo');
    demo.innerHTML = `
        <div id="product">
            <img src=${data.photos[0].text} alt=${data.model} />
            <h3>${data.year} ${data.manufacturer} ${data.model}</h3>
            <p>${data.hours} hours</p>
        </div>
    `;
}
 

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

1. Пожалуйста, укажите дополнительную информацию в своем ответе. Как это написано в настоящее время, трудно понять ваше решение.