Как получить общее значение группы с одинаковым json объектом? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть json, и у него есть все города в Италии. Каждый город принадлежит области.

Теперь мне нужно получить все значения popolazione для каждого региона

например. regione: {codice: "03", nome: "Lombardia"} и сделайте общий подсчет для каждого города, чтобы иметь возможность получить общую сумму по региону.

Json структура:

{nome: "Dizzasco", codice: "013087", zona: {…}, regione: {…}, provincia: {…}, …}
nome: "Dizzasco"
codice: "013087"
zona: {codice: "1", nome: "Nord-ovest"}
regione: {codice: "03", nome: "Lombardia"}
provincia: {codice: "013", nome: "Como"}
sigla: "CO"
codiceCatastale: "D310"
cap: ["22020"]
popolazione: 565

nome: "Dobbiaco"
codice: "021028"
zona: {codice: "2", nome: "Nord-est"}
regione: {codice: "04", nome: "Trentino-Alto Adige/Südtirol"}
provincia: {codice: "021", nome: "Bolzano/Bozen"}
sigla: "BZ"
codiceCatastale: "D311"
cap: ["39034"]
popolazione: 3314

nome: "Domaso"
codice: "013089"
zona: {codice: "1", nome: "Nord-ovest"}
regione: {codice: "03", nome: "Lombardia"}
provincia: {codice: "013", nome: "Como"}
sigla: "CO"
codiceCatastale: "D329"
cap: ["22013"]
popolazione: 1455

Ищите:

Общая численность населения в Ломбардии - 2020

И делайте это для каждого региона.

Это то, что я получил, но я толкаю каждый город и каждое население в каждом городе, но я пропускаю логи c, чтобы сделать общее для каждого региона. Мысль сделать проверку, если inArray или сделать проверку для city string name

 var regioni = [];
 var popolazione = [];

 $.getJSON(url, function(data) {
        for(var d = 0; d < data.length; ++d) {
          var thisDataRegione = data[d];
          var thisDataRegioneNome = thisDataRegione["regione"].nome;
          regioni.push(thisDataRegioneNome["regione"].nome);           
          popolazione.push(data[d].popolazione);
      }
  });

Ответы [ 3 ]

1 голос
/ 31 марта 2020

Вам не нужно поддерживать два разных массива. Вы можете добавить это в подобный объект, теперь у вас есть регион в качестве ключа и общая численность населения в качестве значения. если вы хотите все регионы, вы можете сделать Object.keys(regionePopulation). Это даст массив регионов.

var regionePopulation = {};
$.getJSON(url, function(data) {
        data.forEach((item) => regionePopulation[item.regione.name] = !regionePopulation[item.regione.name] ? item.popolazione : regionePopulation[item.regione.name] + item.popolazione)
console.log(regionePopulation)
  });
1 голос
/ 31 марта 2020

Я не знаю, действительно ли я понимаю ваш json и код, но вы должны быть в состоянии сделать что-то вроде этого:

let regioni = {};

$.getJSON(url, function(data) {
    for(var d = 0; d < data.length; ++d) {
        let thisDataRegione = data[d];
        let thisDataRegioneNome = thisDataRegione["regione"].nome;

        // if we see this region name for the first time initialize the count
        // to zero, otherwise add the new population data
        if (regioni[thisDataRegioneNome] === undefined) regioni[thisDataRegioneNome] = 0;
        else regioni[thisDataRegioneNome] += data[d].popolazione;
    }
    // this should be an object that has the regions with the total count 
    // for example regioni["Lambardia"] == 2020
    // and so on
    console.log(regioni);
});
0 голосов
/ 31 марта 2020

Предполагая, что это на самом деле ваша структура данных:

[
    {
        nome: "Dizzasco",
        codice: "013087",
        zona: {codice: "1", nome: "Nord-ovest"},
        regione: {codice: "03", nome: "Lombardia"},
        provincia: {codice: "013", nome: "Como"},
        sigla: "CO",
        codiceCatastale: "D310",
        cap: ["22020"],
        popolazione: 565,
    },
    ....
]

Вы почти у цели. Вам нужно накапливать число вместо того, чтобы хранить каждое значение в массиве, как вы делаете сейчас. Смотри:

var data=[
  {
    nome: "Dizzasco",
    codice: "013087",
    zona: {codice: "1", nome: "Nord-ovest"},
    regione: {codice: "03", nome: "Lombardia"},
    provincia: {codice: "013", nome: "Como"},
    sigla: "CO",
    codiceCatastale: "D310",
    cap: ["22020"],
    popolazione: 565,
  },
  {
    nome: "Dobbiaco",
    codice: "021028",
    zona: {codice: "2", nome: "Nord-est"},
    regione: {codice: "04", nome: "Trentino-Alto Adige/Südtirol"},
    provincia: {codice: "021", nome: "Bolzano/Bozen"},
    sigla: "BZ",
    codiceCatastale: "D311",
    cap: ["39034"],
    popolazione: 3314
  }
];

var populationByRegion={},
  totalPopulation=0;
for(var d = 0; d < data.length; ++d) {
  var item=data[d],
    thisDataRegioneNome=item.regione.nome,
    population=item.popolazione;
  //If this is the first time we find this region, initialize the accumulator
  if(!populationByRegion.hasOwnProperty(thisDataRegioneNome)) populationByRegion[thisDataRegioneNome]=0;
  //Then just sum the population
  populationByRegion[thisDataRegioneNome]+=population;
  //You can also count the total among all the regions
  totalPopulation+=population;
}

console.log("Population by region",populationByRegion);
console.log("Total",totalPopulation);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...