透過 Map() 在你的物件屬性加入排序
物件屬性的順序
一個物件是一個
Object
的類型。它是包含原始值、物件、或是函式這些尚未排序屬性的集合。一個物件的屬性儲存了一個函式稱為方法。 ECMAScript
實際看一下範例
var myObject = {
z: 1,
'@': 2,
b: 3,
1: 4,
5: 5
};
console.log(myObject) // Object {1: 4, 5: 5, z: 1, @: 2, b: 3}
for (item in myObject) {...
// 1
// 5
// z
// @
// b
因為每個瀏覽器有自己排序物件的規則,所以順序是不確定的。
要如何解決這個問題?
Map
使用 ES6 的新特性 - Map。Map 物件迭代元素插入的順序。for...of
迴圈每次迭代回傳一個 [key, value] 的陣列。
var myObject = new Map();
myObject.set('z', 1);
myObject.set('@', 2);
myObject.set('b', 3);
for (var [key, value] of myObject) {
console.log(key, value);
...
// z 1
// @ 2
// b 3
對舊的瀏覽器 Hack
Mozilla 建議:
所以,如果你想要在跨瀏覽器的環境模擬一個有排序的關聯陣列,你要麼強制使用兩個分離的陣列(其中一個給 keys,另一個給 values),或者建立一個單一屬性的物件陣列,等等。
// 使用兩個分離的陣列
var objectKeys = [z, @, b, 1, 5];
for (item in objectKeys) {
myObject[item]
...
// 建立一個單一屬性的物件陣列
var myData = [{z: 1}, {'@': 2}, {b: 3}, {1: 4}, {5: 5}];
MEET THE NEW JSTIPS BOOK
You no longer need 10+ years of experience to get your dream job.
Use the 100 answers in this short book to boost your confidence and skills to ace the interviews at your favorite companies like Twitter, Google and Netflix.
GET THE BOOK NOW
MEET THE NEW JSTIPS BOOK
The book to ace the JavaScript Interview.
A short book with 100 answers designed to boost your knowledge and help you ace the technical interview within a few days.
GET THE BOOK NOW