Как получить доступ к этому типу недвижимости? - PullRequest
0 голосов
/ 11 июня 2018

У меня есть JSON OUTPUT, который имеет последний highest_value, и я хочу напечатать в моем ajax:

[{"first":1},{"last":1},{"other":3},{"highest_value":{"other":3}}]

Как я могу получить доступ к {"highest_value":{"other":3} в моем ajax .

Вот мой код Ajax:

<script>


          $.getJSON('/ytl/public/api/first-hour-trades', function(data) {

              $.each(data, function(firstHourTrades, element) {
                  $("#msg1").append($('<div>', {
                      text: element.first
                  }));
                  $("#msg2").append($('<div>', {
                      text: element.last
                  }));
                  $("#msg3").append($('<div>', {
                      text: element.other
                  }));
                  $("#msg4").append($('<div>', {
                      text: element.highest_value[0]
                  }));
              });
          });




    </script>

Ответы [ 2 ]

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

Действительно, было бы лучше, если бы вы могли реструктурировать свой ответ:

{
    "first":1,
    "last":1,
    "other":3,
    "highest_value":{"other":3}
}

, в этом случае вы бы получили к нему доступ следующим образом

element.highest_value.other

, если вы действительно не можете себе позволитьчтобы сделать это, но вы хотите сделать порядок выбора независимым (в случае, если структура данных меняется со временем), вам нужно сделать что-то вроде

data.forEach(function(obj){
    if(obj.highest_value !== undefined){
        console.log(object.highest_value.other);//this is the one you want
    }
});

, чтобы работающая версия вашего кода выглядела примерно так:

$.getJSON('/ytl/public/api/first-hour-trades', function(data) {

    $.each(data, function(firstHourTrades, element) {//this loops once for each object
        if(element.first !== undefined){//we need to check if this is the object with the property "first"
            $("#msg1").append($('<div>', {
                text: element.first
            }));
        }
        if(element.last !== undefined){
            $("#msg2").append($('<div>', {
                text: element.last
            }));
        }
        if(element.other !== undefined){
            $("#msg3").append($('<div>', {
                text: element.other
            }));
        }
        if(element.highest_value !== undefined){
            $("#msg4").append($('<div>', {
                text: element.highest_value.other
            }));
        }
    });
});

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

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

Если data - это массив, который вы показали, то find it:

console.log(data
  .find((prop) => prop.hasOwnProperty("highest_value")));

Это даст {"highest_value":{"other":3}}.

Toполучить 3, получить первое значение объекта в .highest_value:

console.log(Object.values(data
  .find((prop) => prop.hasOwnProperty("highest_value"))
  .highest_value)[0]);

Если вы уже знаете, что это четвертый элемент, то вы не сможетенужно найти его, и вы можете просто использовать это, чтобы поставить 3 как text.

$("#msg4").append($('<div>', {
  text: Object.values(element.highest_value)[0]
}));

Если вы не знаете, какой элемент будет иметь свойство highest_value или сколько их будетВы можете переписать свой код следующим образом:

$.getJSON('/ytl/public/api/first-hour-trades', function(data){
  const highest = data.splice(data.findIndex((prop) => prop.hasOwnProperty("highest_value")), 1)[0];

  data.forEach((element, index) => $(`#msg${index + 1}`).append($('<div>', {
    text: Object.values(element)[0]
  })));
  $(`#msg${data.length + 1}`).append($('<div>', {
    text: Object.values(highest.highest_value)[0]
  }));
});

Идентификаторы с возрастающими номерами также могут не понадобиться, но все зависит от того, как должна выглядеть большая картина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...