2
votes

Entités spécifiques JSON au tableau JavaScript

J'ai un ensemble de données JSON provenant du côté serveur comme:

var year = [2001, 2020, 2040];
var magnitude = [20, 21, 22];

Je souhaite convertir ces ensembles de données en tableaux JavaScript. Par exemple, pour l'année et la magnitude dans le json. Je veux ces données en Javascript sous la forme:

[
{"id":1, "year":"2001", "magnitude":20},
{"id":2, "year":"2020", "magnitude":21},
{"id":3, "year":"2040", "magnitude":22}
]

J'ai essayé différentes solutions mais je ne suis pas défini pendant que j'alerte pour tester les données. Comment dois-je aborder pour résoudre ce problème?


1 commentaires

Montrez votre code qui n'a pas été défini, s'il vous plaît.


6 Réponses :


0
votes

En supposant que le nom de l'objet que vous obtenez du serveur est 'response'.

var years = response.map(el => el.year);
var magnitudes = response.map(el => el.magnitude);

Voici un exemple de violon: https://jsfiddle.net/gadawag/uye8kmvf/


0 commentaires

1
votes

Vous pouvez utiliser réduire et Object.entries () . Parcourez les entrées de chaque objet et mettez à jour l'accumulateur. Cela fonctionne pour n'importe quel nombre de propriétés dans les objets internes:

{
   "id": [1, 2, 3],
   "year": ["2001", "2020", "2040"],
   "magnitude": [20, 21, 22]
}

Voici à quoi ressemble fusionné :

const input=[{id:1,year:"2001",magnitude:20},{id:2,year:"2020",magnitude:21},{id:3,year:"2040",magnitude:22}];

let merged = input.reduce((r, a) => {
  Object.entries(a).forEach(([k, v]) => {
    r[k] = r[k] || [];
    r[k].push(v)
  })

  return r;
}, {})

let { id, year, magnitude } = merged;

console.log(id)
console.log(year)
console.log(magnitude)


1 commentaires

Déstructuration intelligente ici. Certainement une réponse intéressante.



2
votes

Vous pouvez prendre un tableau des clés voulues et collecter les valeurs dans un objet. Plus tard, déstructurez l'objet et obtenez les tableaux voulus.

.as-console-wrapper { max-height: 100% !important; top: 0; }
var data = [{ id: 1, year: "2001", magnitude: 20 }, { id: 2, year: "2020", magnitude: 21 }, { id: 3, year: "2040", magnitude: 22 }],
    keys = ['year', 'magnitude'],
    collection = data.reduce((r, o) => {
        keys.forEach(k => r[k].push(o[k]));
        return r;
    }, Object.assign(...keys.map(k => ({ [k]: [] })))),
    { year, magnitude } = collection;

console.log(year);
console.log(magnitude);


0 commentaires

1
votes

Écrivez simplement une fonction et utilisez map pour obtenir une propriété dynamique.

const data = [{ id: 1, year: "2001", magnitude: 20 }, { id: 2, year: "2020", magnitude: 21 }, { id: 3, year: "2040", magnitude: 22 }]

const getBy = key => data.map(e => e[key])

console.log(getBy('year'))
console.log(getBy('magnitude'))
console.log(getBy('id'))


0 commentaires

-1
votes

Commencez par analyser le JSON, puis utilisez la carte fonction

const years = parsed.map(item => Number.parseInt(item.year, 10));

1) J'ai noté un problème JSON dans votre exemple. Il manquait une virgule après le deuxième élément.
2) Si vous voulez analyser les années en nombres, vous pouvez le faire:

const data = '[{"id":1, "year":"2001", "magnitude":20},{"id":2, "year":"2020", "magnitude":21},{"id":3, "year":"2040", "magnitude":22}]';

const parsed = JSON.parse(data);
const years = parsed.map(item => item.year);
const magnitudes = parsed.map(item => item.magnitude);

console.log('years', years);
console.log('magnitudes', magnitudes);


0 commentaires

1
votes

Utiliser la méthode map () pour les tableaux serait la solution la plus moderne pour cette tâche. Fondamentalement, il renvoie un nouveau tableau basé sur la fonction que vous fournissez:

var json = [
    {"id":1, "year":"2001", "magnitude":20},
    {"id":2, "year":"2020", "magnitude":21},
    {"id":3, "year":"2040", "magnitude":22}
];
var year = json.map(arr => arr.year);
var magnitude = json.map(arr => arr.magnitude);


0 commentaires