Pertanyaan Mengonversi Objek ke Array menggunakan fitur ES6


Mengingat objek javascript, bagaimana saya bisa mengkonversinya ke array di ECMAScript-6?

Misalnya, diberikan:

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

Output yang diharapkan adalah:

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

Urutan elemen-elemen dalam hasil tidak penting bagi saya.


35
2017-08-09 10:44


asal


Jawaban:


Gunakan (ES5) Array::map di atas keys dengan sebuah fungsi panah (hanya untuk sintaksis pendek, bukan fungsionalitas):

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

Gaya ES6 yang sebenarnya adalah dengan menulis generator, dan mengonversinya menjadi sebuah array:

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

Sayangnya, tidak objek iterator telah berhasil masuk ke ES6 pribumi.


66
2017-08-09 11:33



gunakan saja Object.values

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

20
2017-08-03 15:49



Ini dapat dicapai dengan menggunakan Sintaks Pemisahan Array:

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

Contoh penggunaan:

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
2017-08-09 10:44



Saya suka cara sekolah lama:

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

Sekolah tua memenangkan tes jsperf dengan selisih besar, jika bukan upvote. Terkadang penambahan baru adalah "salah-fitur."


7
2017-08-09 10:54



Array.map sama dengan @Bergifungsi panah (lihat MDN untuk lebih lanjut tentang Array.map)

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

2
2017-08-09 10:59