При непосредственном доступе к суб-массиву объекта он становится объектом объекта - PullRequest
0 голосов
/ 31 октября 2019

Мне нужен массив объектов для передачи в cavansJs. Этот массив является элементом более сложного объекта, передаваемого из PHP в JS-скрипт таким образом

var active_alarms_data = JSON.parse('<?php echo json_encode($activePriceAlarms,JSON_NUMERIC_CHECK);?>');

Я также пытался

var active_alarms_data = <?php echo json_encode($activePriceAlarms,JSON_NUMERIC_CHECK);?>;

Это структура основного объекта

enter image description here

Данные для диаграммы находятся в подмассиве factory_made_avg_graph_prices_stats, распечатывая на console.log весь объект, это поле выглядит правильно отформатированным какмассив;видно, что он объявлен как тип Array с 104 элементами, каждый из которых проиндексирован числом от 0 до 103. Хорошо, это то, что мне нужно !! Но когда я обращаюсь непосредственно к массиву, я получаю нечто очень странное

console.log("ELEMENT 0: " + active_alarms_data[i].graph.factory_made_avg_graph_prices_stats);

Я получаю

enter image description here

и диаграммуостается пустым, вероятно, только потому, что ожидаемый формат данных отличается от предыдущего. Любое предложение?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

В вашем коде все в порядке.

Это просто консольный журнал, который сбивает вас с толку. Доступ к каждому из элементов, как вы сейчас, будет работать нормально. Причина, по которой вы видите [объект Object], заключается в том, что когда вы объединяете (объединяете с '+') что-то в строку в javascript, если это не строка, она сначала попытается преобразовать ее в строку.

Вы смотрите строковое представление каждого объекта в массиве. Если вы удалите «ELEMENT 0:» и зарегистрируете только массив, вы увидите то, что увидели первыми. Вот пример:

const obj = { test: [{ foo: 'bar' }] }
console.log('ELEMENT 0: ' + obj.test)
console.log(obj.test)

Или, если вам действительно нужно увидеть «Элемент 0», вы можете использовать запятую вместо прямой конкатенации:

const obj = { test: [{ foo: 'bar' }] }
console.log('ELEMENT 0:', obj.test)
0 голосов
/ 31 октября 2019

Консоль как это:

console.log("ELEMENT 0: " , 
active_alarms_data[i].graph.factory_made_avg_graph_prices_stats);

Заменить '+' на ',' в консоли

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