Domanda

Mi chiedevo se ci fosse un modo rapido per chiavi estratto di array associativo in un array, o un elenco separato da virgole utilizzando JavaScript (jQuery è ok).

options = {key1: "value1", key2: "value2"};

risultato dovrebbe essere la matrice:

["key1", "key2"]

o solo una stringa:

"key1, key2"
È stato utile?

Soluzione

Si può facilmente ottenere una serie di loro tramite un ciclo for, ad esempio:

var keys = [];
for(var key in options) {
  if(options.hasOwnProperty(key)) { //to be safe
    keys.push(key);
  }
}

Quindi utilizzare keys come si desidera, ad esempio:

var keyString = keys.join(", ");

È possibile provarlo qui . Il controllo .hasOwnProperty() è quello di essere al sicuro, nel caso qualcuno pasticciato con il prototipo dell'oggetto e così via.

Altri suggerimenti

options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);

Un modo jQuery di farlo:

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.push(key) })
console.log(keys)

La maggior parte dei principali browser hanno questa funzionalità built-in ora, il metodo è Object.keys() :

var keys = Object.keys(options);
//-> ["key1", "key2"]

È anche possibile utilizzare un piccolo frammento di attuare questa nei browser che non lo supportano:

Object.keys = Object.keys || (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty;

    return function (o) {
        if (typeof o != "object" && typeof o != "function" || o === null)
            throw new TypeError("Object.keys called on a non-object");

        var result = [];
        for (var name in o) {
            if (hasOwnProperty.call(o, name))
                result.push(name);
        }

        return result;
    };
})();

Questo frammento funziona più o meno lo stesso di quello nell'esempio di Nick Craver con 2 eccezioni:

  • Si lancerà una TypeError significativo se si passa qualcosa di diverso da un oggetto (o "array associativo", se vi piace).
  • Si aggirare un problema DOM-correlato fastidioso in Internet Explorer dove le collezioni non hanno il metodo hasOwnProperty.

Questa (e le altre risposte qui) non funziona intorno ad un bug di IE enumerazione, però. È possibile trovare ulteriori informazioni e un lavoro parziale in giro per quella su questa risposta qui .

È ora possibile utilizzare

Object.keys(obj)

per ottenere una matrice che consiste delle chiavi disponibili a un oggetto. Mozilla ha l'uso e la disponibilità delle informazioni .

È possibile utilizzare $.each() in jQuery:

function keyArray(obj) {
  var rv = [];
  $.each(options, function(key) { rv.push(key); });
  return rv;
}

poi

var keys = keyArray(options);

ti dà ["key1", "key2"] come un array, che si potrebbe join per ottenere una stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top