Как я могу перебрать несколько объектов в массиве API - PullRequest
0 голосов
/ 26 января 2019

С моим текущим кодом я могу пройти через один объект, чтобы получить данные, которые мне нужны. Я столкнулся с проблемой, пытаясь перебрать все доступные объекты, чтобы я мог получить данные от всех объектов, возвращаемых при поиске ajax.

Это код, который я использую для поиска по одному объекту.

$.ajax({
 url: "",
 type: "get",
 async: true,
 contentType: "application/json",
 success: function(data) {
 console.log(data);


   var fields = data[0].Fields ;


 document.getElementById("test").innerHTML = fields
 .map(function(field) {
  return '<p>' + field.DisplayName + ': ' + field.DataValue + '</p>';
  })
 .join('\n');

Я пытался удалить [0] в var fields = data [0] .fields, но я получаю, что карта не определена.

Когда я попытался добавить цикл for для поиска по всем доступным объектам, я почти уверен, что настроил его неправильно. У меня не получается прочитать длину свойства undefined ...

  var fields = data.Fields ;
  for(i = 0; i > fields.length; i++){
   document.getElementById("test").innerHTML = fields
 .map(function(field) {
  return '<p>' + field.DisplayName + ': ' + field.DataValue + '</p>';
 })
 .join('\n');
 }

Вот вывод console.log (data)

(3) [{…}, {…}, {…}]
0: {Fields: Array(8), DocImage: {…}}
1: {Fields: Array(8), DocImage: {…}}
2: {Fields: Array(8), DocImage: {…}}
length: 3
__proto__: Array(0)

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Из вашего ответа, я думаю, ваши данные примерно такие:

var data = [{Fields: [{DisplayName: 1, DataValue: 1}, {DisplayName: 2, DataValue: 2}], DocImage: '1'},
            {Fields: [{DisplayName: 11, DataValue: 11}, {DisplayName: 22, DataValue: 22}], DocImage: '2'},
            {Fields: [{DisplayName: 31, DataValue: 31}, {DisplayName: 32, DataValue: 32}], DocImage: '3'}] ;

Если это правда, ваш цикл может быть:

document.getElementById("test").innerHTML = data.map(function(field) {
    return field.Fields.map(function(e) {
        return '<p>' + e.DisplayName + ': ' + e.DataValue + '</p>';
    }).join('<br/>');
}).join('<br/>');

var data = [{Fields: [{DisplayName: 1, DataValue: 1}, {DisplayName: 2, DataValue: 2}], DocImage: '1'},
{Fields: [{DisplayName: 11, DataValue: 11}, {DisplayName: 22, DataValue: 22}], DocImage: '2'},
{Fields: [{DisplayName: 31, DataValue: 31}, {DisplayName: 32, DataValue: 32}], DocImage: '3'}] ;

document.getElementById("test").innerHTML = data.map(function(field) {
    return field.Fields.map(function(e) {
        return '<p>' + e.DisplayName + ': ' + e.DataValue + '</p>';
    }).join('<br/>');
}).join('<br/>');
<div id="test"></div>
0 голосов
/ 26 января 2019

Основываясь на структуре данных, предоставляемых API, вы можете выполнить цикл внутри цикла; e.g.:

const data = [
  {Fields: [{DisplayName: 'a', DataValue: 1}]},
  {Fields: [{DisplayName: 'b', DataValue: 2}, {DisplayName: 'c', DataValue: 3}]},
];

document.getElementById("test").innerHTML = data.map(({Fields}) => (
  Fields.map(({DisplayName, DataValue}) => (
    `<p>${DisplayName}: ${DataValue}</p>`
  )).join('\n')
)).join('\n');
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>title</title>
  </head>
  <body>
    <p id=test></p>
  </body>
</html>
0 голосов
/ 26 января 2019

Вам следует перебирать массив данных, а не свойство Fields:

  for(i = 0; i > data.length; i++){
   document.getElementById("test").innerHTML = data[i].fields
 .map(function(field) {
  return '<p>' + field.DisplayName + ': ' + field.DataValue + '</p>';
 })
 .join('\n');
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...