返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS中轻松遍历对象属性的几种方式
  • 339
分享到

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

2024-04-02 19:04:59 339人浏览 安东尼
摘要

目录1、自身可枚举属性2、Object.values() 返回属性值3、Object.entries()4、对象属性的顺序1、自身可枚举属性 Object.keys() 方法会返回一

1、自身可枚举属性

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 。如果对象的键-值都不可枚举,那么将返回由键组成的数组。

这是合理的,因为大多数时候只需要关注对象自身的属性。

来看看一个对象拥有自身和继承属性的例子,Object.keys()只返回自己的属性键:


let simpleColors = {
  colorA: 'white',
  colorB: 'black'
};
let natureColors = {
  colorC: 'green',
  colorD: 'yellow'
};
Object.setPrototypeOf(natureColors, simpleColors);
Object.keys(natureColors); // => ['colorC', 'colorD']
natureColors['colorA'];    // => 'white'
natureColors['colorB'];    // => 'black'

Object.setPrototypeOf() 方法设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另一个对象或 null。

Object.keys(natureColors)返回natureColors对象的自身可枚举属性键:['colorC','colorD']。

natureColors包含从simpleColors原型对象继承的属性,但是Object.keys()函数会跳过它们。

Object.values()Object.entries() 也都是返回一个给定对象自身可枚举属性的键值对数组


// ...
Object.values(natureColors); 
// => ['green', 'yellow']
Object.entries(natureColors);
// => [ ['colorC', 'green'], ['colorD', 'yellow'] ]

现在注意与for..in语句的区别,for..in不仅可以循环枚举自身属性还可以枚举原型链中的属性


// ...
let enumerableKeys = [];
for (let key in natureColors) {
  enumerableKeys.push(key);
}
enumerableKeys; // => ['colorC', 'colorD', 'colorA', 'colorB']

enumerableKeys数组包含natureColors自身属性键: 'colorC'和'colorD'。

另外for..in也遍历了从simpleColors原型对象继承的属性

2、Object.values() 返回属性值

**Object.values()**方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

来个例子,使用Object.keys()收集keys,然后通过 key 去对象取对应的值:


let meals = {
  mealA: 'Breakfast',
  mealB: 'Lunch',
  mealC: 'Dinner'
};
for (let key of Object.keys(meals)) {
  let mealName = meals[key];
  // ... do something with mealName
  console.log(mealName);
}
// 'Breakfast' 'Lunch' 'Dinner'

meal是一个普通对象。 使用Object.keys(meals)和枚举的for..of循环获取对象键值。

代码看起来很简单,但是,let mealName = meals[key] 没有多大的必要,可以进一步优化如下:


let meals = {
  mealA: 'Breakfast',
  mealB: 'Lunch',
  mealC: 'Dinner'
};
for (let mealName of Object.values(meals)) {
  console.log(mealName);
}
// 'Breakfast' 'Lunch' 'Dinner'

因为Object.values(meals)返回数组中的对象属性值,所以可以直接在 for..of 中简化。 mealName直接在循环中赋值。

3、Object.entries()

Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。

Object.entries() 返回键值对数组,如 [ [key1, value1], [key2, value2], ..., [keyN, valueN] ]。

可能直接使用这些键值对不怎么方便,但可以通过数组解构赋值方式访问键和值就变得非常容易,如下所示:


let meals = {
  mealA: 'Breakfast',
  mealB: 'Lunch',
  mealC: 'Dinner'
};
for (let [key, value] of Object.entries(meals)) {
  console.log(key + ':' + value);
}
// 'mealA:Breakfast' 'mealB:Lunch' 'mealC:Dinner'

如上所示,因为 Object.entries()返回一个与数组解构赋值兼容的集合,因此不需要为赋值或声明添加额外的行。

当普通对象要转换成 Map 时Object.entries() 就很有用,因为Object.entries() 返回的格式与Map构造函数接受的格式完全相同:(key,value)。

使用常规的Map构造函数可以将一个二维键值对数组转换成一个Map对象。

来个例子,让人缓缓:


let greetings = {
  morning: 'Good morning',
  midday: 'Good day',
  evening: 'Good evening'
};
let greetingsMap = new Map(Object.entries(greetings));
greetingsMap.get('morning'); // => 'Good morning'
greetingsMap.get('midday');  // => 'Good day'
greetingsMap.get('evening'); // => 'Good evening'

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'] ]


注意:reetingsMap.values()greetingsMap.entries()返回迭代器对象。若要将结果放入数组,扩展运算符…是必要的。

4、对象属性的顺序

js 对象是简单的键值映射,因此,对象中属性的顺序是微不足道的, 在大多数情况下,不应该依赖它。

在ES5和早期标准中,根本没有指定属性的顺序。

然而,从ES 6开始,属性的顺序是基于一个特殊的规则的,除非特指按照时间排序。通过两个新方法Object.getOwnPropertyNames和Reflect.ownKeys来编写示例讲解这一属性排序规则。

  • 数字:当属性的类型时数字类型时,会按照数字的从大到小的顺序进行排序;
  • 字符串:当属性的类型是字符串时,会按照时间的先后顺序进行排序;
  • Symbol:当属性的类型是Symbol时,会按照时间的先后顺序进行排序。

如果需要有序集合,建议将数据存储到数组或Set中。

总结

Object.values() Object.entries() 是为JS开发人员提供新的标准化辅助函数的另一个改进步骤。

Object.entries()最适用于数组解构赋值,其方式是将键和值轻松分配给不同的变量。 此函数还可以轻松地将纯JS对象属性映射到Map对象中。、

注意:Object.values()Object.entries()返回数据的顺序是不确定的,所以不要依赖该方式。

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

到此这篇关于JS中轻松遍历对象属性的几种方式的文章就介绍到这了,更多相关JS中轻松遍历对象属性的几种方式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JS中轻松遍历对象属性的几种方式

本文链接: https://lsjlt.com/news/136829.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS中轻松遍历对象属性的几种方式
    目录1、自身可枚举属性2、Object.values() 返回属性值3、Object.entries()4、对象属性的顺序1、自身可枚举属性 Object.keys() 方法会返回一...
    99+
    2024-04-02
  • jquery如何遍历对象的属性
    在jquery中遍历对象属性的方法:1.新建html项目,引入jquery;2.在项目中定义对象,并赋值;3.使用$.each方法遍历对象属性;具体步骤如下:首先,在新建一个html项目,在项目中引入jquery;<script ty...
    99+
    2024-04-02
  • TypeScript遍历对象属性的问题
    目录一、问题 二、解决办法1. 把对象声明as any 2. 给对象声明一个接口3. 使用泛型4. 使用keyof一、问题   比如下面的代码: type Animal = { ...
    99+
    2024-04-02
  • 怎么在JavaScript中遍历对象属性
    本篇文章为大家展示了怎么在JavaScript中遍历对象属性,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为Java...
    99+
    2023-06-14
  • es6遍历对象属性的方法有哪些
    本文小编为大家详细介绍“es6遍历对象属性的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“es6遍历对象属性的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • vue遍历对象属性的方法有哪些
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。最近通过对象相关知识的深入学习,我发现对象的遍历主要分为两种情况,一种是在页面中遍历,另外一种是在方法中遍历对象,现在我们就从这两种情况分别来遍历对象获取对象的key和v...
    99+
    2023-05-14
    Vue
  • JS中遍历对象的方法有哪些
    本篇内容主要讲解“JS中遍历对象的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中遍历对象的方法有哪些”吧! 1 简介对象是在编程中最常...
    99+
    2024-04-02
  • javascript遍历对象的五种方式实例代码
    目录准备 五种武器 for…in Object.keys Object.getOwnPropertyNames Object.getOwnPropertySymbols Reflec...
    99+
    2024-04-02
  • Java如何遍历Map对象集合(多种方式)6种方式
    Java如何遍历Map对象的4种方法 今天比昨天,更优秀 Map简介 Map是用于保存具有映射关系的数据,保存两组值,key和value,这两组值可以是任何应用类型的数据。Map典型的实现类是H...
    99+
    2023-10-08
    java 开发语言
  • js中的循环方式及各种遍历的方法
    目录for循环while循环  do-while循环 循环的嵌套遍历方法for - infor - offor循环   1、for有三个表达式:①声明循环变量;②判断循环条件;③更新...
    99+
    2024-04-02
  • JavaScript遍历对象的七种方法汇总
    目录前言属性的可枚举性遍历对象for...inObject.keys()Object.values()Object.entries()Object.getOwnPropertyNam...
    99+
    2022-11-13
    JavaScript遍历对象方法 JavaScript遍历对象
  • 怎么解决TypeScript遍历对象属性的问题
    这篇文章主要讲解了“怎么解决TypeScript遍历对象属性的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决TypeScript遍历对象属性的问题”吧!一、问题  比如下面的代码...
    99+
    2023-06-25
  • js删除对象属性的多种方法举例
    目录1.将属性设置为 undefined2.使用 delete 操作符3.使用对象解构4.使用Reflect5.删除数组元素补充:delete 运算符删除对以前定义的对象属性或方法的...
    99+
    2022-12-09
    js删除对象属性的方法 js删除某一个属性 js delete删除对象属性
  • map遍历的几种方式分别是什么
    在Python中,有多种方式可以遍历一个字典(map)。以下是其中几种常见的方式:1. 使用for循环遍历键(key):```pyt...
    99+
    2023-08-25
    map
  • JS中数组常用的循环遍历你会几种
    前言 数组和对象作为一个最基础数据结构,在各种编程语言中都充当着至关重要的角色,你很难想象没有数组和对象的编程语言会是什么模样,特别是 JS ,弱类型语言,非常灵活。本文带你了解常...
    99+
    2024-04-02
  • Python pandas按行、按列遍历DataFrame的几种方式
    目录前言一、按行遍历1. 使用loc或iloc方法2. 使用iterrows()方法二、按列遍历1. 使用列索引方式2. 使用iteritems()方法补充:遍历dataframe每...
    99+
    2024-04-02
  • .NET中创建对象的几种方式和对比
    目录使用标准反射的 Invoke 方法使用 Activator.CreateInstance 使用 Microsoft.Extensions.DependencyInjection ...
    99+
    2024-04-02
  • 浅谈HashMap中7种遍历方式的性能分析
    目录一、前言二、HashMap遍历2.1、迭代器EntrySet2.2、迭代器 KeySet2.3、ForEachEntrySet2.4、ForEach KeySet2.5、Lamb...
    99+
    2024-04-02
  • java中HashMap的7种遍历方式与性能分析
    目录1、遍历方式1.1 迭代器 EntrySet1.2 迭代器 KeySet1.3 ForEach EntrySet1.4 ForEach KeySet1.5 Lambda 表达式1...
    99+
    2024-04-02
  • JS创建对象的四种方式
    目录1.通过字面量的方式去创建对象2.使用new字符创建对象3.自定构造函数创建对象4.工厂模式创建对象创建对象的4种方式: 1.字面量的方式去创建对象 2.使用n...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作