У меня есть большой файл JSON (40 МБ), который содержит информацию о странах, их идентификаторах и, наконец, сумму, которая мне нужна, чтобы получить ее общее количество.
{
"0": {
"id": 0,
"country": "usa",
"sum": 201,
},
"1": {
"id": 1,
"country": "fr",
"sum": 133,
}
}
Когда я пытаюсь извлечь эти данные в переменную, она работает хорошо, но занимает много памяти, поэтому я хочу прочитать поле только суммы этих объектов страны, а затем вычислить общую сумму. Как я могу это сделать?
Я использую следующий код, чтобы получить весь JSON:
fetch(fetchURL)
.then(response => response.json())
.then(responseJSON => {
this.json_data = responseJSON;
})
.catch(error => {
console.log(error);
});
responseJSON.sum не работает, я думаю, что это требует индекса, но я не мог сделать это при получении.
В ES6 вы можете просто сделать следующее:
fetch(fetchURL)
.then(response => response.json())
.then(responseJSON => {
var sum = 0;
for(var i = 0; i < Object.keys(responseJSON).length; i++) {
sum += responseJSON[i]['sum'];
}
console.log(sum); // This is the total sum
})
.catch(error => {
console.log(error);
});
Я не уверен, что полностью понимаю, что вы хотите сделать: либо получите массив только со свойством sum
потому что ваш responseJSON
слишком большой, либо получите фактическую сумму всех переменных sum
.
Вот часть кода, которая может помочь:
var countries = [
{
"id": 0,
"country": "usa",
"sum": 201,
},
{
"id": 1,
"country": "fr",
"sum": 133,
}
];
var totalSum = 0;
var sumArray = countries.map(function(country) {
totalSum = totalSum + country.sum;
return country.sum;
});
В этой части кода я использую функцию отображения javascript, чтобы получить массив со всеми переменными sum
в нем. Я также делаю общую sum
переменных sum
с totalSum
переменной totalSum
.
Если вам просто нужно получить общую сумму переменных sum
, я бы рекомендовал использовать forEach
javascript forEach
а не функцию map
.
Надеюсь, это может помочь...
Вы можете сделать это просто используя reduce
функцию следующим образом
fetch(fetchURL)
.then(response => response.json())
.then(responseJSON => {
const reducer = (accumulator, currentValue) => accumulator.sum + currentValue.sum;
let sum =Object.values(responseJSON).reduce(reducer);
})
.catch(error => {
console.log(error);
});
пример
let arr = {
"0": {
"id": 0,
"country": "usa",
"sum": 201,
},
"1": {
"id": 1,
"country": "fr",
"sum": 133,
}
}
const reducer = (accumulator, currentValue) => accumulator.sum + currentValue.sum;
let sum = Object.values(arr).reduce(reducer);
console.log(sum)