web-dev-qa-db-fra.com

Conversion d'objet en tableau à l'aide des fonctionnalités ES6

Étant donné un objet javascript, comment puis-je le convertir en tableau dans ECMAScript-6?

Par exemple, étant donné:

 var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};

Le résultat attendu serait:

 ['foo', [1,2,3], null, 55]

L'ordre des éléments dans le résultat n'est pas important pour moi.

47
urish

Utilisez (ES5) Array::map sur le keys avec une fonction de flèche (pour la syntaxe courte seulement, pas la fonctionnalité):

let arr = Object.keys(obj).map((k) => obj[k])

Le vrai style ES6 consisterait à écrire un générateur et à le convertir en un tableau:

function* values(obj) {
    for (let prop of Object.keys(obj)) // own properties, you might use
                                       // for (let prop in obj)
        yield obj[prop];
}
let arr = Array.from(values(obj));

Malheureusement, aucun objet itérateur a été intégré aux natifs ES6.

84
Bergi

il suffit d'utiliser Object.values

Object.values(inputObj); // => ['foo', [1,2,3], null, 55]
35
Fareed Alnamrouti

Ceci peut être réalisé en utilisant syntaxe Array Compréhension :

[for (key of Object.keys(inputObj)) inputObj[key]]

Exemple d'utilisation:

var inputObj = {a:'foo', b:[1,2,3], c:null, z:55};
var arr = [for (key of Object.keys(inputObj)) inputObj[key]];
console.log(arr);

// prints [ 'foo', [ 1, 2, 3 ], null, 55 ]
9
urish

J'aime la vieille école:

var i=0, arr=[];
for (var ob in inputObj)
  arr[i++]=ob;

Old school remporte le test jsperf de loin, sinon les votes positifs. Parfois, les nouveaux ajouts sont des "caractéristiques erronées".

8
technosaurus

Array.map équivalent de la fonction flèche de @ Bergi (voir [~ # ~] mdn [~ # ~] pour en savoir plus sur Array.map)

var obj  = {a:'foo', b:[1,2,3], c:null, z:55}
   ,nwarr = Object.keys(obj).map( function (k) {return obj[k];} );
3
KooiInc

Manière ES7:

let obj = { a: "foo", b: "bar", c: 1, d: [1, 2, 3, 4] }

Object.values(obj)

// output --> ['foo', 'bar', 1, [1, 2, 3, 4]
3
Despertaweb