首页 > 编程语言 >[转]如何在 JavaScript 中遍历对象

[转]如何在 JavaScript 中遍历对象

时间:2023-08-18 15:35:39浏览次数:39  
标签:遍历 console log 对象 JavaScript Object 循环 数组 population

原文地址:如何在 JavaScript 中遍历对象

在 JavaScript 中,当你听到“循环”一词时,你可能会想到使用各种循环方法,例如 for 循环forEach() 方法map() 方法等等。

但不幸的是,这些方法对于对象不起作用,因为对象是不可迭代的。

这并不意味着我们不能循环遍历一个对象——只是我们不能像遍历数组一样直接遍历一个对象:

let arr = [24, 33, 77];
arr.forEach((val) => console.log(val)); // ✅✅✅

for (val of arr) {
  console.log(val); // ✅✅✅
}

let obj = { age: 12, name: "John Doe" };
obj.forEach((val) => console.log(val)); // ❌❌❌

for (val of obj) {
  console.log(val); // ❌❌❌
}

在本文中,你将了解如何在 JavaScript 中循环访问对象。你可以使用两种方法——其中一种早于 ES6 的引入。

如何使用 for...in 循环在 JavaScript 中循环对象

在 ES6 之前,每当我们想要循环一个对象时,我们都依赖于 for...in 方法。

for...in 循环遍历原型链中的属性。这意味着每当我们使用 for...in 循环遍历一个对象时,我们都需要使用 hasOwnProperty 检查该属性是否属于该对象:

const population = {
  male: 4,
  female: 93,
  others: 10
};

// Iterate through the object
for (const key in population) {
  if (population.hasOwnProperty(key)) {
    console.log(`${key}: ${population[key]}`);
  }
}

为了避免循环的压力和困难以及使用 hasOwnProperty 方法,ES6 和 ES8 引入了对象静态方法。这些方法将对象属性转换为数组,允许我们直接使用数组方法。

如何使用对象静态方法在 JavaScript 中循环对象

对象由具有键值对的属性组成,即每个属性始终具有对应的值。

对象静态方法让我们可以将 keys()values() 或两者都提取为数组中的 entries()(条目),从而使我们对它们具有与处理实际数组一样多的灵活性。

我们有三个对象静态方法,它们是:

  • Object.keys()
  • Object.values()
  • Object.entries()

如何使用 Object.keys() 方法在 JavaScript 中循环对象

Object.keys() 方法是在 ES6 中引入的。它将我们想要循环的对象作为参数,并返回一个包含所有属性名称(也称为键)的数组。

const population = {
  male: 4,
  female: 93,
  others: 10
};

let genders = Object.keys(population);

console.log(genders); // ["male","female","others"]

现在,这为我们提供了应用任何数组循环方法来遍历数组并检索每个属性的值的优势:

let genders = Object.keys(population);

genders.forEach((gender) => console.log(gender));

这将返回:

"male"
"female"
"others"

我们还可以使用键来通过括号表示法获取值,例如 population[gender],如下所示:

genders.forEach((gender) => {
  console.log(`There are ${population[gender]} ${gender}`);
})

这将返回:

"There are 4 male"
"There are 93 female"
"There are 10 others"

在继续之前,让我们使用这种方法通过循环对所有人口求和,这样我们就知道总人口:

const population = {
  male: 4,
  female: 93,
  others: 10
};

let totalPopulation = 0;
let genders = Object.keys(population);

genders.forEach((gender) => {
  totalPopulation += population[gender];
});

console.log(totalPopulation); // 107

如何使用 Object.values() 方法在 JavaScript 中循环对象

Object.values() 方法与 Object.keys() 方法非常相似,是在 ES8 中引入的。该方法将我们想要循环的对象作为参数,并返回一个包含所有键值的数组。

const population = {
  male: 4,
  female: 93,
  others: 10
};

let numbers = Object.values(population);

console.log(numbers); // [4,93,10]

现在,这为我们提供了应用任何数组循环方法来遍历数组并检索每个属性的值的优势:

let numbers = Object.values(population);

numbers.forEach((number) => console.log(number));

这将返回:

4
93
10

我们可以有效地执行汇总加法,因为我们可以直接循环:

let totalPopulation = 0;
let numbers = Object.values(population);

numbers.forEach((number) => {
  totalPopulation += number;
});

console.log(totalPopulation); // 107

如何使用 Object.entries() 方法在 JavaScript 中循环对象

ES8 也引入了 Object.entries() 方法。从基本意义上讲,它的作用是输出一个数组的数组,其中每个内部数组都有两个元素,即属性和值。

const population = {
  male: 4,
  female: 93,
  others: 10
};

let populationArr = Object.entries(population);

console.log(populationArr);

这将输出:

[
  ['male', 4]
  ['female', 93]
  ['others', 10]
]

这将返回一个数组的数组,每个内部数组都有 [key, value]。你可以使用任何数组方法来循环:

for (array of populationArr){
  console.log(array);
}

// Output:
// ['male', 4]
// ['female', 93]
// ['others', 10]

我们可以决定解构数组,所以我们得到键和值:

for ([key, value] of populationArr){
  console.log(key);
} 

你可以在本文中了解有关如何循环数组的更多信息。

总结

在本教程中,你了解到循环对象的最佳方法是根据你的需要使用对象静态方法,在循环之前首先将对象转换为数组。

标签:遍历,console,log,对象,JavaScript,Object,循环,数组,population
From: https://www.cnblogs.com/dirgo/p/17640650.html

相关文章

  • 第十节 面向对象综合训练(拓展)
    练习一:​ 自行完成切换美女图片的功能。需求如下:需求详解:1,在功能选项中添加更换图片,在更换图片里面再添加美女,动物,运动。​代码中功能是JMenu,更换图片也是JMenu,美女,动物,运动是三个JMenuItem​代码如下://创建菜单并添加到界面当中//1.创建菜单JMenuBar的对象J......
  • 2 JavaScript的基础类型
    2JavaScript的基础类型JS虽然是一个脚本语言.麻雀虽小,五脏俱全.在js中也是可以像其他编程语言一样.声明变量,条件判断,流程控制等等.我们先看一下JS中的数据类型在js中主要有这么几种数据类型(基本)number数字,不论是整数还是小数,数据类型都是numberstring字......
  • 18-面向对象-super关键字
    super关键字super代表父类的引用,用于访问父类的属性、方法、构造器基本语法1)访问父类的属性,但不能访问父类的private属性super.属性名2)访问父类的方法,但不能访问父类的private方法super方法名3)访问父类的构造器,注意只能放在构造器的第一句super(参数列表)publicc......
  • 【校招VIP】java语言类和对象之map、set集合
    考点介绍:map、set集合相关内容是校招面试的高频考点之一。map和set是一种专门用来进行搜索的容器或者数据结构,其搜索效率与其具体的实例化子类有关系。一、考点题目1、HashMap为什么线程不安全?解答:并发赋值被覆盖:在createEntry方法中,新添加的元素直接放在头部,使元素之后可......
  • OpenCV3.3深度神经网络DNN模块 实例3:SSD模型实现对象检测
    1#include<opencv2/opencv.hpp>2#include<opencv2/dnn.hpp>3#include<iostream>45usingnamespacecv;6usingnamespacecv::dnn;7usingnamespacestd;89constsize_twidth=300;//模型尺寸为300*30010constsize......
  • OpenCV3.3深度神经网络DNN模块 实例4:SSD-MobileNet模型实时对象检测
    1#include<opencv2/opencv.hpp>2#include<opencv2/dnn.hpp>3#include<iostream>45usingnamespacecv;6usingnamespacecv::dnn;7usingnamespacestd;89constsize_twidth=300;10constsize_theight=300;11cons......
  • QtWebChannel和JavaScript进行通信(简单理解)
    说明在使用Qt(C++)和JavaScript之间实现通信时,通常会使用一些模块和技术来使两者能够交互和传递数据。这种通信通常用于在Qt应用程序中嵌入Web内容,或者在Web页面中嵌入Qt应用程序。以下是一些常用的模块和技术,以及它们的作用QtWebEngine模块:作用:QtWebEngine是Qt中的Web引擎,允......
  • 类、对象、变量、方法及属性
    类、对象、变量、方法及属性(2007-05-2200:15:34)转载▼     类:类是组成java程序的基本要素。类封装了一类对象的属性和方法。类是用来定义产生对象的模板。类的实现包括两部分:类声明和类体。     类体分为两部分:成员变量和局部变量。   1、......
  • 面向对象的三大特性
    面向对象的三大特性(2007-05-2123:58:41)转载▼   1.封装:面向对象编程核心思想这一就是就是将数据和对数据的操作 封装在一起. 通过抽象,即从具体的实例中抽取共同的性质形成一般的概念,比如类的概念.   2.继承:继承体现了一种先进的编程模式.子......
  • JavaScript-数据类型
    JavaScript语言的每一个值,都属于某一种数据类型。JavaScript的数据类型,共有六种。(ES6又新增了Symbol和BigInt数据类型,本教程不涉及。)数值(number):整数和小数(比如1和3.14)。字符串(string):文本(比如HelloWorld)。布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)。undefined:表......