Harta valoare Cheie pentru a crea o structură json cu obiecte imbricate folosind javascript

0

Problema

Vreau să creez un Obiect de serie de la tv cu matrice care nu va fi obtinerea de rezultate de interogare și doriți să creați json structura ca un răspuns să-l treacă ca răspuns api. De exemplu- Plat matrice-

[{
    user_id: '2311123',
    user_country: 'United States',
    user_city: 'ny',
    ssn: 229
  },
  {
    user_id: '451313',
    user_country: 'United States',
    user_city: 'abc',
    ssn: 147
  },
  {
    user_id: '65345',
    user_country: 'United States',
    user_city: 'abc',
    ssn: 444
  },
  {
     user_id: '763343',
    user_country: 'Australia',
    user_city: 'auus',
    ssn: 678
  }]

Vreau să creez o structură ca - Temperatura de Ieșire

{
  "United States": [
    {
      "ny": [
        {
          "user_id": "2311123",
          "ssn": "7"
        }
      ]
    },
    {
      "abc": [
        {
          "user_id": "451313",
          "ssn": "147"
        },
        {
          "user_id": "65345",
          "ssn": "444"
        }
      ]
    }
  ],
  "Australia": [
    {
      "auus": [
        {
          "user_id": "763343",
          "ssn": "678"
        }
      ]
    }
  ]
}

care a user_country serie de obiecte și user_city serie de obiecte mapate. Eu am incercat acest cod, dar coudnt obține rezultatul așteptat.:

  const map = {};
  results.forEach(arr => {
   console.log("arr",arr)
        if(map[arr.user_country]){
          if(!map[arr.user_country].includes(arr.user_city))
            map[arr.user_country].push(arr.user_city);
        }else{
          map[arr.user_country] = [arr.user_city]
        }
  });
  console.log(map);
arrays javascript json mapping
2021-11-24 06:12:50
4

Cel mai bun răspuns

2

Acest lucru ar putea produce rezultate așteptate:

const array = [{ user_id: '2311123', user_country: 'United States', user_city: 'ny', ssn: 229 }, { user_id: '451313', user_country: 'United States', user_city: 'abc', ssn: 147 }, { user_id: '65345', user_country: 'United States', user_city: 'abc', ssn: 444 }, { user_id: '763343', user_country: 'Australia', user_city: 'auus', ssn: 678 }];


const map = array.reduce((map, {user_country, user_city, ...userInfo}) => {
  if (!map[user_country]) {
    map[user_country] = [{[user_city]: [{...userInfo}]}];
  } else {
    const ex = map[user_country].find(city => Object.keys(city)[0] === user_city);
    if (!ex) {
      map[user_country].push({[user_city]: [{...userInfo}]});
    } else {
      Object.values(ex)[0].push({...userInfo});
    }
  }
  return map;
}, {});

console.log(map);

2021-11-24 06:42:25
1

Vă rugăm să verificați această soluție:

const map = {};
results.forEach(arr => {
    const { user_country, user_id, user_city, ssn } = arr;
    if (!map[user_country]) {
        map[user_country] = [];
    }

    if (map[user_country][user_city]) {
        map[user_country][user_city].push({user_id, ssn});
    } else {
        map[user_country][user_city] = [{user_id, ssn}];
    }
});

console.log(map)
2021-11-24 08:23:29
0

const results = [{
    user_id: '2311123',
    user_country: 'United States',
    user_city: 'ny',
    ssn: 229
  },
  {
    user_id: '451313',
    user_country: 'United States',
    user_city: 'abc',
    ssn: 147
  },
  {
    user_id: '65345',
    user_country: 'United States',
    user_city: 'abc',
    ssn: 444
  },
  {
    user_id: '763343',
    user_country: 'Australia',
    user_city: 'auus',
    ssn: 678
  }
]

const out = {};
results.forEach(i => {
  out[i.user_country] = out[i.user_country] || {};
  out[i.user_country][i.user_city] = out[i.user_country][i.user_city] || [];
  out[i.user_country][i.user_city].push({
    user_id: i.user_id,
    ssn: i.ssn
  })
})

console.log(out)

2021-11-24 06:39:44

Nu ieșire OP fost în căutarea pentru, care este motivul pentru care am adaugat acest comentariu. Dar acest lucru face mai mult sens ca ieșire fwiw. PS nu uita pentru a constrânge ssn la un șir de caractere.
Andy
0

Vă rugăm să verificați că opțiunea:

const results = [{
    user_id: '2311123',
    user_country: 'United States',
    user_city: 'ny',
    ssn: 229
  },
  {
    user_id: '451313',
    user_country: 'United States',
    user_city: 'abc',
    ssn: 147
  },
  {
    user_id: '65345',
    user_country: 'United States',
    user_city: 'abc',
    ssn: 444
  },
  {
     user_id: '763343',
    user_country: 'Australia',
    user_city: 'auus',
    ssn: 678
  }];

const countries = {};

results.forEach(result => {
  const {user_country, user_city, user_id, ssn} = result;
  const cityList = countries[user_country] && countries[user_country][user_city] ? countries[user_country][user_city] : [];
  const newCityList = [...cityList, {
      user_id,
      ssn
    }];
  countries[user_country] = {
    ...countries[user_country],
    [user_city]: newCityList
  };
});

console.log(countries);

2021-11-24 06:43:28

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................