Как получить объект данных JSON за объектом? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть большой 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 не работает, я думаю, что требуется индекс, но я не смогсделай это в пути.

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

В 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);
        });
0 голосов
/ 27 декабря 2018

Вы можете сделать это, просто используя функцию 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)
0 голосов
/ 27 декабря 2018

Я не уверен, что полностью понимаю, что вы хотите сделать: либо получите массив только со свойством 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 с переменной totalSum.

Если вам просто нужно получить общую сумму переменных sum, я бы скорее рекомендовал использовать forEach функция JavaScript, а не map.

Надеюсь, это может помочь ...

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