详谈js for循环和数组遍历方法

news/2024/7/19 16:29:48 标签: js, for循环, 数组, 遍历方法, 迭代

前言

早就想写一篇博客来谈谈js中的循环和一些循环的方法,这次有时间来说说。

正文

一. for类循环

1. for — 传统的方式
    for (let index = 0; index < arr.length; index++) {
        console.log(arr[index])
    }
  • 范围: 可遍历数组,不可遍历对象

  • 迭代中的增减: 在遍历的过程中,如果对数组进行shift,unshift,pop,push,增加的元素会被遍历,删除的元素不会被遍历,但已迭代过的元素被删除(即使用shift)会跳过一个或一些元素

  • 跳出循环的方式:

    • 跳出整个循环:break
    • 跳出当次循环:continue
  • 结果:
    在这里插入图片描述

2. for in
    for (let key in person) {
        console.log(key)
        console.log(person[key])
        person.java = 99
    }
    
    for (let index in arr) {
        console.log(index) //这里输出的index 是string类型,
        console.log(arr[index])
    }
  • 范围: 可遍历数组和对象

  • 迭代中的增减: 增加的元素不会被遍历,删除的元素不会被遍历,但已迭代过的元素被删除(即使用shift)会跳过一个或一些元素

  • 说明:

    • 虽说可以遍历数组,但是for in 是为了遍历对象而设计的,不推荐使用其遍历数组
    • 可以遍历对象或者数组迭代量是数组的下标(string类型的索引值)或者对象的key(属性名)
  • 跳出循环的方式:

    • 跳出整个循环:break
    • 跳出当次循环:continue
  • 结果:
    在这里插入图片描述

3. for of
   for (let item of arr) {
        console.log(item)
    }
  • 范围: 可遍历数组,不能遍历对象

  • 迭代中的增减: 增加的元素会被遍历,删除的元素不会被遍历,但已迭代过的元素被删除(即使用shift)会跳过一个或一些元素

  • 说明:

    • 可以很方便的对数组进行遍历操作,但如果要用到索引值的话,就不要用这个。
  • 跳出循环的方式:

    • 跳出整个循环:break
    • 跳出当次循环:continue
  • 结果:
    在这里插入图片描述

4. jQuery.each()
    $.each(person, (key, value) => {
        console.log(key, value)
    })

    $.each(arr, (index, value) => {
        console.log(index, value)
    })
  • 范围: 可遍历数组和对象

  • 迭代中的增减: 增加的元素不会被遍历,删除的元素不会被遍历,但已迭代过的元素被删除(即使用shift)会跳过一个或一些元素

  • 说明:

    • 注意each方法的回调函数的参数顺序是键,值。
  • 跳出循环的方式:

    • 跳出整个循环:return false
    • 跳出当次循环:return true或者return或者return 其他量
  • 结果:
    在这里插入图片描述

5. forEach
    arr.forEach((item, index, iterable) => {
        console.log(item, index, iterable)
    })
  • 范围: 可遍历数组,不可遍历对象

  • 迭代中的增减: 增加的元素不会被遍历,删除的元素不会被遍历,但已迭代过的元素被删除(即使用shift)会跳过一个或一些元素

  • 说明:

    • 索引值是number类型,回调函数的三个参数都是可选的,按顺序是值,索引号,数组本身
    • 还可增加一个参数,回调函数中this会指向这个参数
    • 如果要跳出整个循环,不要使用它
  • 跳出循环的方式:

    • 跳出整个循环:抛出异常
    • 跳出当次循环:任何的return都只会跳出当次循环
  • 结果:
    在这里插入图片描述

二. 数组遍历方法

1. filter()
    let count = 0
    let newArr = arr.filter(item => {
        count++
        return item < 3
    })
    console.log(newArr, count)
  • 返回值类型: 数组
  • 跳出循环时机: 遍历整个数组
  • 说明:
    • 返回满足条件的项组成的数组,如果没有满足条件的项,返回空数组
  • 结果:
    在这里插入图片描述
2. map()
    let count = 0
    let newArr = arr.map(item => {
        count++
        return item * 10
    })

    console.log(newArr, count)
  • 返回值类型: 数组
  • 跳出循环时机: 遍历整个数组
  • 说明:
    • 数组的每一项进行处理,返回一个新的数组
  • 结果:
    在这里插入图片描述
3. some()
    let count = 0
    let flag = arr.some(item => {
        count++
        return item > 3
    })
    console.log(flag, count)
  • 返回值类型: 布尔值
  • 跳出循环时机: 只要有满足条件的项则立即结束循环
  • 说明:
    • 返回值true/false,只要有满足条件的项则立即结束循环,返回true,否则返回false
  • 结果:
    在这里插入图片描述
4. every()
    let count = 0
    let flag = arr.every(item => {
        count++
        return item <= 5
    })
    console.log(flag, count)
  • 返回值类型: 布尔值
  • 跳出循环时机: 遍历整个数组
  • 说明:
    • 返回值true/false,只有当所有的项都满足条件时返回true,否则返回false,一定会循环完整个数组
  • 结果:
    在这里插入图片描述
4. find()
    let count = 0
    let item = arr.find(item => {
        count++
        return item === 3
    })
    console.log(item, count)
  • 返回值类型: 数组中的项/undfined
  • 跳出循环时机: 循环到第一个满足条件的项
  • 说明:
    • 如果没有满足条件的项,返回undefined
  • 结果:
    在这里插入图片描述
5. findIndex()

find()用法一直,只不过返回的是number类型的索引值,没有满足条件的项时,返回-1

补充

  • 跳出for循环可以利用函数的return (2021/2/26)
function isSuperset(set, subset) {
    for (let elem of subset) {
        if (!set.has(elem)) {
            return false;
        }
    }
    return true;
}

结语

码字不易,如果对你有帮助的话,请点一个赞吧


http://www.niftyadmin.cn/n/1257953.html

相关文章

Vue 中使用 Sass 踩的坑

这两天在vue脚手架中使用Sass&#xff0c;踩了几个坑&#xff0c;分享出来。 在 Vue cli3 中安装 $ npm i sass sass-loader -D首先&#xff0c;要安装的是两个&#xff0c;sass sass-loader其次&#xff0c;一定要安装在开发依赖中&#xff0c;因为它是CSS的预处理器。-D即为…

Sass学习

前言 这两天刚好学到sass&#xff0c;分享一下自己在学习过程中总结的点 正文 基本用法 sass中导入另一个sass import "路径" 注释 单行注释 //&#xff0c;编译后省略&#xff0c;只会保留在sass源文件中多行注释 /* */ &#xff0c;会保留在编译后的css文件中重…

vue 中编写404页面

前言 今日给自己项目添加404页面时&#xff0c;踩了一点坑&#xff0c;分享给大家。 正文 <div class"_404"><h2 class"m-0">抱歉&#xff0c;页面未找到&#xff0c;<span>{{countDown}}</span>s后自动跳转到<a href"j…

async await 对比 Promise

async && await 对比 Promise 的优点 处理异常 Promise 不能catch到Promise内部的异常 //Promise写法 async function returnPromise() {return ok }try {returnPromise().then(res > {console.log(res)throw new Error(可能出错的位置)}).catch(reason > {co…

Vue 数据响应式详解

前言 Vue最具特色的一点&#xff0c;就是数据驱动&#xff0c;即你不用写复杂的DOM操作&#xff0c;只需专心于业务所用到的数据。 那么&#xff0c;Vue的数据响应式到底是怎么实现的呢&#xff1f; 正文 数据变化的过程 侦测数据的变化 (数据劫持 / 数据代理)收集视图依赖…

const 关键字

可能有的误解 对于 ES6 中增加的const关键字&#xff0c;很多人的&#xff08;包括我自己&#xff09;都有一些误解。这个误解是&#xff1a;使用const关键字定义的变量是无法被修改的&#xff0c;即必须在定义的时候就赋值。这话不能说是全错&#xff0c;只是对简单类型和引用…

then 方法

then()方法 如果不是第一个参数函数&#xff0c;则会忽略这个then()&#xff0c;例如 func() .then(hello) //这个then会被忽略 .then(res>{console.log(res) })resolve(arg)的参数arg会传到紧接着的.then(callback(arg))中如果你读懂了下面的例子&#xff0c;那么说明你对t…

数组和伪数组的区别

正文 常见的伪数组有&#xff1a;函数参数arguments&#xff0c;DOM对象列表(例如document.querySelectorAll(div))&#xff0c;jQuery中的$(div)等Array.prototype 伪数组没有Array.prototype&#xff0c;它只是一个对象数组有Array.prototype&#xff0c;他是对象的同时&…