11
votes

Récupération des clés de la paire de vales-clés de JSON Array Dynamiquement - JavaScript

J'ai une question qui souhaite rechercher votre expertise.

Ceci est un tableau JSON que j'ai: xxx

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.

J'utilise cela pour récupérer les valeurs de manière dynamique: xxx

De même, que dois-je faire Pour récupérer les touches à l'aide de JavaScript?


0 commentaires

11 Réponses :


4
votes

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;


2 commentaires

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 ....



0
votes

A par-in -Loop fait le tour. Sur un objet, il ressemble à ceci: xxx


1 commentaires

Cela résume simplement les valeurs. Je crois que le chevaler veut récupérer la liste des clés.



2
votes

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


0 commentaires

4
votes
for (var key in easy) {
    if (easy.hasOwnProperty(key)) {
        keys.push(key)
        vals.push(easy[key])
    }
}

0 commentaires

11
votes

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 commentaires

+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 ...



17
votes

Utilisez-vous d3.js lorsque votre balise implique? Parce que dans ce cas, vous pouvez simplement utiliser d3.Keys () : xxx

Si vous souhaitez la somme de toutes les valeurs, vous pourriez être mieux en train d'utiliser < Code> d3.values ​​() et d3.sum () : xxx


0 commentaires

2
votes

Je pense que c'est le plus simple. xxx

résultat: xxx


1 commentaires

Et s'il y a plusieurs objets dans le tableau?



0
votes

Essayez ceci. C'est simple: xxx


0 commentaires

0
votes

Je pense que cela devrait être analysé de manière récursive comme ci-dessous xxx

usage: getkeys ([], {"A": "1", N: {C: "3" , E: {F: 4, G: [1,2,3]}}})

résultat: ["A", "N", "C", "E", "F", "G"]


0 commentaires

0
votes
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));

0 commentaires

0
votes

arrêter de réinventer la roue ! xxx

MDN


0 commentaires