J 筆記 - Object to Array
繼之前的 String to Array 後,我們已經會了許多種將字串轉成陣列的方法。這篇將介紹如何將 Object 轉成 Array …
Ancient
在 ES6 以前,我們想將 Object 變成 Array 常常會這樣來使用,但其實這種方法真的不太好用!而且跟 Ruby 超級不合適的,宣告一個空的陣列,然後塞東西進去,通常都可以有更好的方法可以取代掉這種寫法…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var ancientObjects = { obj1: 'ancient1', obj2: 'ancient2' };
var emptyArray = [];
for (var ancientObject in ancientObjects) { if (ancientObjects.hasOwnProperty(ancientObject)) { emptyArray.push(ancientObjects); } }
emptyArray;
|
Object.prototype.hasOwnProperty()
ES6 - Object.keys()
ES6後,有了 Object.keys() 這個新方法,不過很奇怪的居然只有提供 key
,卻沒有 value
,意外覺得特別的詭異…
1 2 3 4 5 6 7 8
| let ES6Objects = { ES6Obj1: 'ES6-1', ES6Obj2: 'ES6-2' };
Object.keys(ES6Objects);
|
ES7 - Object.values() / Object.entries()
所以 ES7 就生出 Object.values() 了,不只如此,還連 key + value 同時要印的 Object.entries() 都有(這樣才合理阿!!!
1 2 3 4 5 6 7 8 9
| let ES7Objects = { ES7Obj1: 'ES7-1', ES7Obj2: 'ES7-2' }; Object.values(ES6Objects); Object.entries(ES7Objects);
|
Object.entries + Destructuring
解構開來其實就只是長這樣子而已,應該淺顯易懂吧~
1 2 3 4 5 6 7 8 9 10 11 12
| const ES7Objects = { ES7Obj1: 'ES7-1', };
const objectArray = Object.entries(ES7Objects);
objectArray.forEach(([key, value]) => { console.log(key); console.log(value); });
|
Object.fromEntries
而本質上與 Object.entries
相反,我們今天想要從 Array 再返回去 Object,就可以使用 Object.fromEntries
這個方法…
1 2 3 4 5 6 7
| const ES7Array = [ ['ES7Obj1', 'ES7-1'], ['ES7Obj2', 'ES7-2'], ];
Object.fromEntries(ES7Array);
|
參考資料