JS中轻松遍历对象属性的几种方式( 二 )

Map 对象保存键值对 。任何值(对象或者原始值) 都可以作为一个键或一个值 。
有趣的是,Map提供了与Object.values()和Object.entries() 等效的方法(只是它们返回Iterators),以便为Map实例提取属性值或键值对:
  • Map.prototype.values() 等价于Object.values()
  • Map.prototype.entries() 等价于Object.entries()
map是普通对象的改进版本,可以获取 map 的大小(对于普通对象,必须手动获取),并使用任意对象类型作为键(普通对象使用字符串基元类型作为键) 。
让我们看看返回.values()和.entries()的map的方法:
// ...[...greetingsMap.values()];// => ['Good morning', 'Good day', 'Good evening'][...greetingsMap.entries()];// => [ ['morning', 'Good morning'], ['midday', 'Good day'], // ['evening', 'Good evening'] ]复制代码注意,greetingsMap.values()和greetingsMap.entries()返回迭代器对象 。若要将结果放入数组,扩展运算符…是必要的 。
对象属性的顺序
JS 对象是简单的键值映射,因此,对象中属性的顺序是微不足道的,在大多数情况下,不应该依赖它 。
在ES5和早期标准中,根本没有指定属性的顺序 。
然而,从ES 6开始,属性的顺序是基于一个特殊的规则的,除非特指按照时间排序 。通过两个新方法Object.getOwnPropertyNames和Reflect.ownKeys来编写示例讲解这一属性排序规则 。
  • 数字:当属性的类型时数字类型时,会按照数字的从大到小的顺序进行排序;
  • 字符串:当属性的类型是字符串时,会按照时间的先后顺序进行排序;
  • Symbol:当属性的类型是Symbol时,会按照时间的先后顺序进行排序 。
如果需要有序集合,建议将数据存储到数组或Set中 。
总结
Object.values() 和Object.entries() 是为JS开发人员提供新的标准化辅助函数的另一个改进步骤 。
Object.entries()最适用于数组解构赋值,其方式是将键和值轻松分配给不同的变量 。此函数还可以轻松地将纯JS对象属性映射到Map对象中 。、
注意,Object.values()和Object.entries()返回数据的顺序是不确定的,所以不要依赖该方式 。

【JS中轻松遍历对象属性的几种方式】


推荐阅读