É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.
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.
il suffit d'utiliser Object.values
Object.values(inputObj); // => ['foo', [1,2,3], null, 55]
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 ]
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".
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];} );
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]