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?
6 Réponses :
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/
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)
Déstructuration intelligente ici. Certainement une réponse intéressante.
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);
É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'))
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);
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);
Montrez votre code qui n'a pas été défini, s'il vous plaît.