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

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日

相关文章

  • Actionscript与javascript交互实例程序(修改)

    针对“Actionscript与javascript交互实例程序(修改)”这一文章,我将分为以下几个部分进行详细讲解: 文章介绍 修改内容说明 ActionScript与JavaScript交互示例 综合示例程序 总结 1. 文章介绍 该篇文章主要介绍了ActionScript与JavaScript相互交互的实现方式,通过ExternalInterface类…

    JavaScript 2023年5月27日
    00
  • 分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容

    这里是分享自定义的console类让JS调试代码更方便的攻略: 1. 创建一个自定义的Console类 创建一个可以封装原生console使其在不同浏览器环境下具有兼容性的类,示例代码如下: class CustomConsole { constructor() { this.logHistory = []; this.registerConsoleMeth…

    JavaScript 2023年6月11日
    00
  • javascript截取字符串小结

    JavaScript截取字符串小结 在JavaScript中,截取字符串是很常见的操作。这篇文章将为你介绍如何使用JavaScript截取字符串,并提供一些示例说明。 截取字符串的方式 1. substring方法 使用substring方法可以通过传递起始索引和结束索引来截取字符串。 let str = ‘这是一个字符串’; let result = st…

    JavaScript 2023年5月28日
    00
  • JavaScript闭包原理与使用介绍

    JavaScript闭包原理与使用介绍 什么是闭包(Closure) 在 JavaScript 中,闭包(Closure)是指被包含在函数中的一个函数和其对外部变量的引用组合。 通俗地说,当一个函数访问其外部作用域中的变量时,就创建了一个闭包。 闭包的原理 在 JavaScript 中,每当创建一个函数时,都会为该函数创建一个作用域链(Scope Chain…

    JavaScript 2023年6月10日
    00
  • Android 实现WebView点击图片查看大图列表及图片保存功能

    Android 实现WebView点击图片查看大图列表及图片保存功能 简介 在WebView中点击图片可以实现图片查看、图片保存等功能是非常常见且实用的功能,本文将详细介绍如何在Android中实现WebView点击图片查看大图列表及图片保存功能。 WebView中显示图片 在Android中使用WebView加载网页时,如果网页中有图片,则图片默认是不会展…

    JavaScript 2023年6月11日
    00
  • JS前后端实现身份证号验证代码解析

    下面是“JS前后端实现身份证号验证代码解析”的完整攻略。 前言 身份证号是人们最常用的个人身份证明,因此在各个业务场景中,我们经常需要对输入的身份证号进行格式验证。本文将介绍如何使用 JavaScript 在前后端实现身份证号验证,帮助开发者更好地应对业务需求。 方案概述 实现身份证号验证的主要过程如下: 在前端通过 JavaScript 判断用户输入的身份…

    JavaScript 2023年6月10日
    00
  • JavaScript 匿名函数(anonymous function)与闭包(closure)

    JavaScript 匿名函数(anonymous function)与闭包(closure)是 JavaScript 语言中比较常用且常误解的概念。在本文中,我们将详细介绍匿名函数与闭包的概念、用法及其注意事项。 匿名函数 概念 匿名函数是指没有函数名的函数。在 JavaScript 中,我们通常通过函数表达式来定义匿名函数。如下所示: const add…

    JavaScript 2023年5月27日
    00
  • JavaScript数组去重的6个方法

    下面是对于“JavaScript数组去重的6个方法”的完整攻略。 方法一:Set去重 使用ES6的Set,可以直接将数组转化为Set集合,再转化回数组的时候就自然地去重了。 const arr = [1,2,3,1,2,4]; const newArr = […new Set(arr)]; console.log(newArr); // [1,2,3,4…

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