Object.entries()
和 Object.values()
本章節說明 ECMAScript 2017 的功能「Object.values/Object.entries」,由 Jordan Harband 所提出。
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
Object.values()
> Object.values({ one: 1, two: 2 })
[ 1, 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
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]]
Object.entries()
Object.entries()
的傳回值是陣列,而不是迭代器?Object.keys()
,而不是 Map.prototype.entries()
等。Object.entries()
只傳回可列舉自有字串鍵屬性?Object.keys()
保持一致。該方法也會忽略其鍵為符號的屬性。最後,可能會有一個方法 Reflect.ownEntries()
傳回所有自有屬性。Object.values()
Object.values()
具有下列簽章
Object
.
values
(
value
:
any
)
:
Array
<
any
>
它的運作方式與 Object.entries()
非常類似,但正如其名稱所示,它只傳回自有可列舉字串鍵屬性的值
> Object.values({ one: 1, two: 2 })
[ 1, 2 ]