Базовый javascript / JSON захват элементов из списка

#javascript #php #arrays #json

#javascript #php #массивы #json

Вопрос:

У меня есть PHP-массив данных $ mainarray, который я пытаюсь манипулировать с помощью javascript.

Я сделал это:

 var masterdata = <?php echo json_encode($mainarray); ?>;
  

Чтобы проверить, как это получилось, я сделал это:

 alert(JSON.stringify(masterdata, null, 4));
  

И я получил это:

 {
"Department":"Fire",
"Year":"2014",
"Amount":"311.3"
},
{
"Department":"Police",
"Year":"2014",
"Amount":"622.3"
},
{
"Department":"Vehicles",
"Year":"2014",
"Amount":"100.9"
}
...
  

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

 if (masterdata[Department] == "Fire" amp;amp; masterdata[Year] == "2014") 
    fireamount2014 = masterdata[Amount];
  

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

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

1. Закрыть. masterdata[i]["Department"] или masterdata[i].Department , предполагая, что вы находитесь в цикле с i в качестве счетчика. Т.е. заключите имена свойств в кавычки, если используете квадратные скобки, или не заключайте кавычки, если используете точечную нотацию. (Также обратите внимание, что вы должны использовать console.log() , а не alert() отлаживать значения переменных.)

Ответ №1:

 for (var i in masterdata) {
    if (masterdata[i]['Department'] == 'Fire' amp;amp; masterdata[i]['Year'] == '2014') {
        fireamount2014 = masterdata[i]['Amount'];
    }
}
  

Это должно сработать.

РЕДАКТИРОВАТЬ Также рекомендуется убедиться, что сначала существуют ключевые «Отдел», «Год» и «Сумма», прежде чем обращаться к ним, выполняя что-то вроде

 if (masterdata[i]['Department'] !== undefined)
  

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

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

Ответ №2:

Вы можете использовать Array.prototype.reduce для суммирования количества пожаров за каждый год и передавать его обратно как объект, индексированный по году.

 const data = [{
  "Department": "Fire",
  "Year": "2014",
  "Amount": "311.3"
}, {
  "Department": "Police",
  "Year": "2014",
  "Amount": "622.3"
}, {
  "Department": "Vehicles",
  "Year": "2014",
  "Amount": "100.9"
}, {
  "Department": "Vehicles",
  "Year": "2015",
  "Amount": "100.9"
}]

console.log(
  data.reduce((acc, item) => {
    // set the default for the year
    if (!acc['FireAmount_'   item.Year]) {
      acc['FireAmount_'   item.Year] = 0
    }
    // increment the new amount on the the stored FireAmount
    acc['FireAmount_'   item.Year]  = Number(item.Amount)
    return acc
  }, {})
)