目錄
請支持這本書:購買(PDF、EPUB、MOBI)捐款
(廣告,請不要封鎖。)

7. Object.entries()Object.values()

本章節說明 ECMAScript 2017 的功能「Object.values/Object.entries」,由 Jordan Harband 所提出。

7.1 概觀

7.1.1 Object.entries()

let obj = { one: 1, two: 2 };
for (let [k,v] of Object.entries(obj)) {
    console.log(`${JSON.stringify(k)}: ${JSON.stringify(v)}`);
}
// Output:
// "one": 1
// "two": 2

7.1.2 Object.values()

> Object.values({ one: 1, two: 2 })
[ 1, 2 ]

7.2 Object.entries()

此方法具有下列簽章

Object.entries(value : any) : Array<[string,any]>

如果 JavaScript 資料結構具有鍵和值,則條目是鍵值對,編碼為 2 元素陣列。Object.entries(x) 強制轉換 x 為物件,並傳回其可列舉自有字串鍵屬性的條目,在陣列中

> Object.entries({ one: 1, two: 2 })
[ [ 'one', 1 ], [ 'two', 2 ] ]

其鍵為符號的屬性會被忽略

> Object.entries({ [Symbol()]: 123, foo: 'abc' });
[ [ 'foo', 'abc' ] ]

Object.entries() 終於提供我們一個方法來反覆運算物件的屬性(在此閱讀為何物件預設不可反覆運算

let obj = { one: 1, two: 2 };
for (let [k,v] of Object.entries(obj)) {
    console.log(`${JSON.stringify(k)}: ${JSON.stringify(v)}`);
}
// Output:
// "one": 1
// "two": 2

7.2.1 透過 Object.entries() 設定 Map

Object.entries() 也讓您可以透過物件設定 Map。這比使用 2 元素陣列的陣列更簡潔,但鍵只能是字串。

let map = new Map(Object.entries({
    one: 1,
    two: 2,
}));
console.log(JSON.stringify([...map]));
    // [["one",1],["two",2]]

7.2.2 常見問題:Object.entries()

7.3 Object.values()

Object.values() 具有下列簽章

Object.values(value : any) : Array<any>

它的運作方式與 Object.entries() 非常類似,但正如其名稱所示,它只傳回自有可列舉字串鍵屬性的值

> Object.values({ one: 1, two: 2 })
[ 1, 2 ]
下一篇:8. 新字串方法:padStartpadEnd