目录
请支持本书:购买 (PDF, EPUB, MOBI)捐赠
(广告,请不要屏蔽。)

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

本章描述了由 Jordan Harband 提出的 ECMAScript 2017 特性“Object.values/Object.entries”。

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