Mapa de valor de la Clave para crear una estructura json con objetos anidados con javascript

0

Pregunta

Quiero crear un Objeto de la matriz desde el plano de la matriz que va a obtener a partir de los resultados de la consulta y desea crear estructura json como una respuesta a lo pasamos como respuesta api. Por ejemplo: - Plano de la matriz de

[{
    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
  }]

Quiero crear una estructura como la Esperada Salida

{
  "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"
        }
      ]
    }
  ]
}

que ha user_country matriz de objetos y user_city matriz de objetos mapeados. He probado este código, pero coudnt lograr el resultado esperado.:

  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

Mejor respuesta

2

Esto podría producir los resultados esperados:

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

Por favor revise esta solución:

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

No la salida de la OP fue buscando, que es por eso que he añadido ese comentario. Pero esto tiene más sentido como de salida, por lo que vale. PS no se olvide de obligar a la ssn para una cadena.
Andy
0

Por favor, compruebe que la opción:

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

En otros idiomas

Esta página está en otros idiomas

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