JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解

yizhihongxing

JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解

javascript中,遍历数组和对象是非常常见的操作。它们之间有一些区别,我们需要学会如何正确遍历它们。此外,递归遍历对象、数组、属性也是非常重要的技能。在本文中,我们将详细讲解相关内容。

一、JS遍历数组和对象的区别

  1. 遍历数组

遍历数组通常使用for循环或forEach()方法。for循环可以使用数组的length属性,使用索引值来遍历数组。如下所示:

let arr = [1, 2, 3];
for(let i=0; i<arr.length; i++){
    console.log(arr[i]);
}

// 输出结果:
// 1
// 2
// 3

forEach()方法是数组自带的方法,它接收一个回调函数作为参数,该函数接收当前遍历到的元素、索引值和数组本身作为参数。如下所示:

let arr = [1, 2, 3];
arr.forEach(function(num, index, array){
    console.log(num);
});

// 输出结果:
// 1
// 2
// 3
  1. 遍历对象

遍历对象通常使用for-in循环或Object.keys()方法。for-in循环会遍历对象的所有可枚举属性(包括原型链上的属性),它会将属性名作为变量来遍历。如下所示:

let obj = {name: 'Jerry', age: 18};
for(let key in obj){
    console.log(key + ': ' + obj[key]);
}

// 输出结果:
// name: Jerry
// age: 18

Object.keys()方法会返回一个对象中所有可枚举的属性名组成的数组,然后我们可以使用for循环来遍历该数组。如下所示:

let obj = {name: 'Jerry', age: 18};
let keys = Object.keys(obj);
for(let i=0; i<keys.length; i++){
    let key = keys[i];
    console.log(key + ': ' + obj[key]);
}

// 输出结果:
// name: Jerry
// age: 18

二、递归遍历对象、数组、属性的方法详解

  1. 递归遍历对象

递归遍历对象的方法,在函数内先获取当前对象的所有属性名,然后遍历各个属性,如果属性值是一个对象,则再次调用函数进行递归遍历,如果属性值不是对象,则输出该属性值。如下所示:

function iterateObj(obj){
    for(let key in obj){
        if(typeof obj[key] === 'object' && obj[key] !== null){
            iterateObj(obj[key]);
        }else{
            console.log(key + ': ' + obj[key]);
        }
    }
}
// 示例:
let obj = {name: 'Jerry', age: 18, address: {province: 'Zhejiang', city: 'Hangzhou'}};
iterateObj(obj);

// 输出结果:
// name: Jerry
// age: 18
// province: Zhejiang
// city: Hangzhou
  1. 递归遍历数组

递归遍历数组的方法,在函数内先遍历数组各个元素,如果有元素是对象或数组,则再次调用函数进行递归遍历,如果不是,则直接输出该元素。如下所示:

function iterateArr(arr){
    for(let i=0; i<arr.length; i++){
        if(typeof arr[i] === 'object' && arr[i] !== null){
            if(Array.isArray(arr[i])){
                iterateArr(arr[i]);
            }else{
                iterateObj(arr[i]);
            }
        }else{
            console.log(arr[i]);
        }
    }
}
// 示例:
let arr = [1, 2, {name: 'Jerry', age: 18, address: {province: 'Zhejiang', city: 'Hangzhou'}}, [3, 4]];
iterateArr(arr);

// 输出结果:
// 1
// 2
// name: Jerry
// age: 18
// province: Zhejiang
// city: Hangzhou
// 3
// 4
  1. 递归遍历属性

递归遍历属性可以通过递归遍历对象实现。如下所示:

function iterateProp(obj, prefix = ''){
    for(let key in obj){
        if(typeof obj[key] === 'object' && obj[key] !== null){
            iterateProp(obj[key], prefix + key + '.');
        }else{
            console.log(prefix + key + ': ' + obj[key]);
        }
    }
}
// 示例:
let obj = {name: 'Jerry', age: 18, address: {province: 'Zhejiang', city: 'Hangzhou'}};
iterateProp(obj);

// 输出结果:
// name: Jerry
// age: 18
// address.province: Zhejiang
// address.city: Hangzhou

以上是JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 使用Python解析JSON的实现示例

    下面我将为您详细讲解“使用Python解析JSON的实现示例”的完整攻略。 一、JSON简介 JSON全称为JavaScript Object Notation,它是一种轻量级的数据交换格式。在现代的Web应用开发中,JSON作为一种简单、易于理解的数据格式而备受推崇,常常使用在前后端数据交互、API接口等场景中。 一个JSON对象由一些键值对组成,键值对之…

    JavaScript 2023年6月11日
    00
  • 详解搭建一个vue-cli的移动端H5开发模板

    下面我将详细讲解如何搭建一个vue-cli的移动端H5开发模板。 准备工作 首先,需要安装node.js和npm。 然后,使用npm安装vue-cli:npm install -g vue-cli 创建项目 在命令行中执行以下命令创建一个基于webpack模板的vue项目: vue init webpack my-project cd my-project …

    JavaScript 2023年6月11日
    00
  • 结合 ES6 类编写JavaScript 创建型模式

    结合 ES6 类编写JavaScript 创建型模式的步骤: 定义一个类,这个类代表要创建的对象类型。 在类中定义一个静态方法,这个静态方法将使用类的构造函数来创建一个对象。 定义一个方法,用于对类的实例进行初始化。这个方法通常是一个构造函数或者一个工厂方法。 对类进行扩展,以便可以创建新的对象类型。 实例化新的对象。 下面简单介绍两种在 ES6 中创建 J…

    JavaScript 2023年6月10日
    00
  • javascript开发技术大全-第3章 js数据类型

    JavaScript 开发技术大全 – 第3章 JS 数据类型 JavaScript 语言在数据类型方面相对于其他语言而言,具有非常灵活的特点。这是因为 JavaScript 在遵循 ECMAScript 规范的基础上,主要采用了基本数据类型和引用数据类型两种方式来处理数据。 基本数据类型 JavaScript 的基本数据类型有以下 7 种: 数字类型(Nu…

    JavaScript 2023年5月17日
    00
  • 微信小程序API—获取定位的详解

    微信小程序API—获取定位的详解 什么是获取定位? 获取定位是指小程序通过调用微信所提供的API,获得用户当前的地理位置信息。通过获取定位,小程序可以根据用户所在的位置提供相应的服务。 如何获取定位? 在小程序中,我们可以通过wx.getLocation()方法来获取用户当前位置的经纬度信息。在API文档中,我们可以找到该方法的详细描述。下面是该方法的基本语…

    JavaScript 2023年6月11日
    00
  • JS面试题大坑之隐式类型转换实例代码

    针对“JS面试题大坑之隐式类型转换实例代码”这个主题,我会从以下几个方面展开攻略: 什么是隐式类型转换 JavaScript 是弱类型语言,它有一些隐式类型转换的规则,比如当进行数字类型和字符串类型运算时,JavaScript 会自动将其中一种类型转换成另一种,使得运算得以进行。这就是隐式类型转换。 那么,隐式类型转换会带来什么问题呢?我们很容易写出一些会出…

    JavaScript 2023年5月19日
    00
  • Jquery表单验证失败后不提交的解决方法

    下面是详细讲解JQuery表单验证失败后不提交的解决方法的完整攻略: 1. JQuery表单验证插件 在解决JQuery表单验证失败后不提交的问题之前,我们需要了解一下JQuery表单验证插件,常见的表单验证插件有如下几种: (1) JQuery Validate JQuery Validate是最常用的表单验证插件之一,它可以验证表单的必填、邮件格式、数字…

    JavaScript 2023年6月10日
    00
  • js中的cookie的读写操作示例详解

    有关 JavaScript 中的 Cookie 读写操作,通常需要通过 document.cookie 属性进行实现。下面是关于如何读写 Cookie 的示例及详细攻略。 读取 Cookie 值 通过 document.cookie 属性可以访问 Cookie 值。Cookie 格式通常为 name=value,使用分号(;)将多个 Cookie 分隔开,每…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部