Combinaison de deux tableaux pour former un objet javascript
J'ai deux tableaux:
var columns = ["Date", "Number", "Size", "Location", "Age"];
var rows = [["2001", "5", "Big", "Sydney", "25"],["2005", "2", "Med", "Melbourne", "50"],["2012", "20", "Huge", "Brisbane", "80"]];
Je suis en train de les combiner dans un objet javascript pour chaque élément dans les lignes de la matrice. Après cela, j'ai envie de pousser chaque objet dans un nouveau tableau.
Comme:
var newarray = [];
//'thing' should be the same structure for each row item
var thing = {
"Date" : "2001",
"Number" : "5",
"Size":"Big",
"Location":"Sydney",
"Age":"25"
}
newarray.push(thing);
Je peux le faire quand je sais les noms des colonnes, mais j'ai besoin d'être capable de stocker les données de cette façon, lorsque le nom de la colonne est inconnue - c'est à dire basée sur les indices du tableau de colonnes.
Je l'ai essayé comme ça avant:
for(var y = 0; y < rows.length; y++){
for(var i = 0; i < columns.length; i++){
thing[columns[i]] = rows[i][i];
}
newarray.push(thing)
}
Le code ci-dessus ne sont stockées que le premier élément, encore et encore (selon les lignes.la longueur).
Je ne comprends pas comment combiner les noms de colonne avec les lignes pour créer un tableau d'objets. Le fait que les "rangs" contient des tableaux est particulièrement déroutant..
source d'informationauteur tamarasaurus
Vous devez vous connecter pour publier un commentaire.
Créer un nouveau
thing
objet au début de chaque itération de la boucle externe. Si vous ne le faites pas, chaque fois que vous ditesthing[columns[i]]
vous serez en écrasant les propriétés d'un même objet, et lorsque vous le poussez dansnewarray
ce que vous finissez avec est un tableau plein de références à le même objet. Aussi, à l'intérieur de la boucle assurez-vous d'obtenir l'index droit (vous avez actuellement obtenu[i][i]
au lieu de[y][i]
):"Le fait que" les lignes " contient des tableaux est particulièrement déroutant.."
Pour votre échantillon de données
rows.length
sera de 3, etrows[0]
est le tableau:rows[0][3]
est "Sydney".Utiliser que comme un exemple, vous devriez être en mesure de voir ce
rows[y][i]
vous donnera, pour chaque valeur dey
eti
...Vous pourriez aussi bien le faire de plus en plus centrées sur les données:
De cette façon, vous n'aurez pas à traiter avec la temporaire de tableaux.
Dans le cas où votre code devrait fonctionner sur ancienne navigateurs ainsi, je vous recommande de jeter un oeil à underscore.js pour l'utilisation de
map
+reduce
.Dans le cas où vous utilisez Underscore.js il est
_.objet(liste [valeur])
Et voici comment il est mis en œuvre:
À l'aide fonctionnelle serait comme nnnnnn dit, mais avec une correction mineure
Vous devez spécifier la ligne droite. Vous êtes à l'aide de la colonne. Remplacer
rows[i][i]
avecrows[y][i]
. Aussi, on dirait que vous ré-utilisez le mêmething
objet. Au lieu de cela, vous devez définir le il de nouveau à chaque itération à travers le tableau (var thing = {};
).Vous pouvez utiliser cette fonction après ES6 code:
Lien vers des exemples
vous avez juste besoin de réinitialiser
thing
voir mise à jour : violon
je pense que ma solution est de résoudre votre problème
code:
réponse: