J'ai une question qui souhaite rechercher votre expertise.
Ceci est un tableau JSON que j'ai: p> Ce que je voudrais faire est Pour récupérer les touches (A, B, C, D, E) de la matrice JSON au lieu des valeurs. Je suis capable de récupérer les valeurs mais pas les touches. P> J'utilise cela pour récupérer les valeurs de manière dynamique: p> De même, que dois-je faire Pour récupérer les touches
11 Réponses :
Utilisez pour .. Dans CODE>:
var result = 0;
for (var i = jsonArray.length - 1; i >= 0; --i) {
var o = jsonArray[i];
for (var key in o) {
if (o.hasOwnProperty(key)) {
result += o[key];
}
}
// in your code, you return result here,
// which might not give the right result
// if the array has more than 1 element
}
return result;
Cela résume simplement les valeurs. Je crois que le chevaler veut récupérer la liste des clés.
@Sahil Muthoo: Ce n'est pas ce que j'ai compris ... pour moi, il veut résumer les valeurs, mais sans connaître les clés à l'avance ....
A par-in code> -Loop fait le tour. Sur un objet, il ressemble à ceci:
Cela résume simplement les valeurs. Je crois que le chevaler veut récupérer la liste des clés.
Essayez d'utiliser le JavaScript pour..in Déclaration
:
var getKeys = function(arr) { var key, keys = []; for (i=0; i<arr.length; i++) { for (key in arr[i]) { keys.push(key); } } return keys; }; var a = [{"A":20, "B":32, "C":27, "D":30, "E":40}, {"F":50}] getKeys(a); // => ["A", "B", "C", "D", "E", "F"]
for (var key in easy) { if (easy.hasOwnProperty(key)) { keys.push(key) vals.push(easy[key]) } }
Toutes les solutions postées actuelles ont un problème. Aucun d'entre eux rechercher objet.hasownProperty (PROP) code>
Tout en itérant sur un objet en utilisant un ... en boucle. Cela pourrait causer des clés fantômes à apparaître si des propriétés sont ajoutées au prototype.
citant Douglas Crockford P>
Sachez que les membres qui sont ajoutés au prototype de l'objet seront inclus dans l'énumération. Il est sage de programmer de manière défensive en utilisant la méthode HasownProperty pour distinguer les vrais membres de l'objet. P> blockQuote>
Ajout d'une vérification de
hasowroperty code> à la solution d'excellente solution de Maerie. P>
var getKeys = function (arr) { var key, keys = []; for (i = 0; i < arr.length; i++) { for (key in arr[i]) { if (arr[i].hasOwnProperty(key)) { keys.push(key); } } } return keys; };
+1 Ce n'est pas vraiment un problème pour un objet JSON-désérialisé, mais vous avez raison, le code est meilleur avec le chèque. Je vais l'ajouter à ma réponse ...
Utilisez-vous d3.js lorsque votre balise implique? Parce que dans ce cas, vous pouvez simplement utiliser Si vous souhaitez la somme de toutes les valeurs, vous pourriez être mieux en train d'utiliser < Code> d3.values () code> et d3.Keys () code>:
d3.sum () code>: p>
Je pense que c'est le plus simple. résultat: p>
Et s'il y a plusieurs objets dans le tableau?
Essayez ceci. C'est simple:
Je pense que cela devrait être analysé de manière récursive comme ci-dessous usage: résultat:
["A", "N", "C", "E", "F", "G"] P> P> getkeys ([], {"A": "1", N: {C: "3" , E: {F: 4, G: [1,2,3]}}}) Code> P>
var _ = require('underscore'); var obj = [{"A":20,"B":32,"C":27,"D":30,"E":40},{"F":50}, {"G":60,"H":70},{"I":80}]; var keys = [], values = []; _.each(obj, function(d) { keys.push(_.keys(d)); values.push(_.values(d)); }); // Keys -> [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' ] console.log('Keys -> ', _.flatten(keys )); // Values -> [ 20, 32, 27, 30, 40, 50, 60, 70, 80 ] console.log('Values -> ', _.flatten(values));