#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
}, {})
)