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

StackOverflow https://stackoverflow.com/questions/7391362

  •  29-10-2019
  •  | 
  •  

Question

J'ai une question qui aimerait demander votre expertise.

Ceci est un tableau JSON que j'ai:

[{"A":20,"B":32,"C":27,"D":30,"E":40}]

Ce que je voudrais faire, c'est récupérer les clés (a, b, c, d, e) du tableau JSON au lieu des valeurs. Je suis capable de récupérer les valeurs mais pas les clés.

J'utilise ceci pour récupérer les valeurs dynamiquement:

function calculateSum(jsonArray) {
    var result = 0;
    for (var i = jsonArray.length - 1;  i >= 0; --i)
    {
        var o = jsonArray[i];
        A = o.A;
        B = o.B;
        C = o.C;
        D = o.D;
        E = o.E;
        result = A + B + C + D + E;
        return result;
    }

    return result;
}

De même, que dois-je faire pour récupérer le clés Utilisation de JavaScript?

Était-ce utile?

La solution

Utilises-tu D3.js Comme votre balise l'indique? Parce que dans ce cas, vous pouvez simplement utiliser d3.keys():

var data = [{"A":20,"B":32,"C":27,"D":30,"E":40}];
d3.keys(data[0]); // ["A", "B", "C", "D", "E"] 

Si vous voulez la somme de toutes les valeurs, vous feriez mieux d'utiliser d3.values() et d3.sum():

var data = [{"A":20,"B":32,"C":27,"D":30,"E":40}, {"F":50}];
// get total of all object totals
var total = d3.sum(data, function(d) {
    // get total of a single object's values
    return d3.sum(d3.values(d));
});
total; // 199

Autres conseils

Toutes les solutions publiées actuelles ont un problème. Aucun d'entre eux ne vérifie object.hasOwnProperty(prop) tout en itérant sur un objet en utilisant un pour ... en boucle. Cela peut entraîner l'apparition des clés fantômes si des propriétés sont ajoutées au prototype.

Citation Douglas Crockford

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.

Ajouter un chèque pour hasOwnProperty à l'excellente solution des maériques.

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;
    };

Utilisation for .. in:

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;
var easy = {
    a: 1,
    b: 2,
    c: 3
}

var keys = [], vals = []
for (var key in easy) {
    keys.push(key)
    vals.push(easy[key])
}

alert(keys+" - tha's how easy baby, it's gonna be")
alert(vals+" - tha's how easy baby, it's gonna be")

défensivement

Y compris la méthode défensive de @ Sahil ...

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

Essayez d'utiliser le Javascrip for..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"]

Je pense que c'est le plus simple.

var a = [{"A":20,"B":32,"C":27,"D":30,"E":40}];
Object.keys( a[0] );

Résultat :

["A", "B", "C", "D", "E"]

UN for-in-loop fait l'affaire. Sur un objet, il ressemble à ceci:

var o = {
    a: 5,
    b: 3
};
var num = 0;

for (var key in o) {
    num += o[key];
}
alert(num);

Essaye ça. C'est simple:

var a = [{"A":20,"B":32,"C":27,"D":30,"E":40}];

for(var i in a){
  for(var j in a[i]){
    console.log(j); // shows key
    console.log(a[i][j]); // shows value
  }
}

Je pense que cela devrait être analysé récursivement comme ci-dessous

var getKeys = function(previousKeys,obj){
        var currentKeys = Object.keys(obj);
        previousKeys = previousKeys.concat(currentKeys);
        for(var i=0;i<currentKeys.length;i++){
            var innerObj = obj[currentKeys[i]];
            if(innerObj!==null && typeof innerObj === 'object' && !Array.isArray(innerObj)){
            return this.getKeys(previousKeys,innerObj);
            }
        }
        return previousKeys;
    }

usage: getKeys([],{"a":"1",n:{c:"3",e:{ f:4,g:[1,2,3]}}})

Résultat: ["a", "n", "c", "e", "f", "g"

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

arrêter de réinventer la roue !

Object.keys()

MDN

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top