zoukankan      html  css  js  c++  java
  • JS数组遍历方法集合

    就让我们在逆战中成长吧,加油武汉,加油自己

    1.for循环

    使用零时变量将长度存起来,当数组较大时优化效果才会比较明显

    var ar1=[2,4,6,8]
    for(var i=0;i<ar1.length;i++){
        console.log(i)
      console.log(ar1[i]) }

    2.foreach循环

    遍历数组中每个数,没有返回值

    使用break不能中断循环,使用return也不能返回到外层函数

    var ar1=[2,4,6,8]
    ar1.foreach((item,index,arr){
        //第一个参数代表当前元素
        //第二个参数代表当前元素下标
        //第三个参数代表原数组
    })
    //数组中长度多少就循环多少次

    3.for-of循环

    运行循环获得键值

    var ar1=[2,4,6,8]
    for(var i of ar1){
        console.log(i)
        //2,4,6,8
    }

    for-of可用使用break,continue 和 return 配合使用,跳出循环

    for(var i of ar1){
        if(i==4){
            break
        }
        console.log(i)//2
    }

    对于普通对象直接遍历的话是会报错的 obj is not iterable

    for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法:

    可以使用 Object.keys(obj) 方法将对象的键名生成一个数组,然后遍历这个数组

    var obj={
            "naem":"张三",
            "age":18
        }
        for(var i of Object.keys(obj)){
            console.log(i+":"+obj[i])
            //name:张三  age:18
        }

    4.for-in

    只能获得对象的键名,不能获得键值

    var obj={
            "naem":"张三",
            "age":18
        }
    for(var i in obj){
            console.log(i)
            //name
            //age
        }   

    for...in 循环不仅遍历数字键名,还会遍历手动添加的其它键,甚至包括原型链上的键。for...of 则不会这样

    let arr = [1, 2, 3]
    arr.set = 'hello'  // 手动添加的键
    Array.prototype.name = 'word'  // 原型链上的键
     
    for(var i in arr) {
      console.log(i)
    //0
    //1
    //2
    //set
    //name
    }

    for-in是为遍历对象而设计的,不适用于遍历数组。(遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0","1","2"等是字符串)

    5.map

    不会改变原数组,有返回值可用return,成为一个新数组(只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了)

    var ar1=[2,4,6,8,12]
    var map1=ar1.map((item)=>{
        if(item==6){
            return item*2
        }
    })
    console.log(map1)
    //[undefined, undefined, 12, undefined, undefined]

    之所以会出现undefined,是因为map()方法创建了一个新数组,但新数组并不是在遍历完array1后才被赋值的

    下面这样写才是正确的

    var map1=ar1.map((item)=>{
        if(item == 6){
            return item * 2
        }
        return item
    })
    console.log(map1)
    //[2,4,12,8,12]

    5.filter

    不会对原数组进行修改 返回新数组

     var filt=ar1.filter((item,index)=>{
         //返回索引大于2的元素组成新的数组
        if(index>2){
            return item
        }
     })
     console.log(filt)
     //[8,12]

    6.reduce

    reduce()作为一个循环使用。接收四个参数:初始值(上一次返回值),当前元素值,当前元素下标,原数组。

    var a=[4,5,6,7,8]
    //item代表一次回调的值 初始值为0
    //cart代表当前元素的值
    //index当前下标
    //arr原数组
    var num=a.reduce((item,cart,index,arr)=>{
        return item+=cart
    },0)
    //初始值为0
    
    console.log(num) //输出为30

    7.some

    every()与some()方法都是JS中数组的迭代方法。

    some()是对数组中每一项运行给定函数,如果该函数满足任一返回true,则返回flase

    var a=[1,2,4,69,56,89]
    var some1=a.some((item)=>{
    return item > 50
    })
    console.log(some1)//true

    8.every()

    every()与some()方法都是JS中数组的迭代方法。

    every()是对数组中每一项运行给定函数,如果该函数所有项返回true,则返回true。一旦有一项不满足则返回flase

    var a=[1,2,4,69,56,89]
    var some1=a.every((item)=>{
    return item > 50
    })
    console.log(some1)//flase
  • 相关阅读:
    86. Partition List
    328. Odd Even Linked List
    19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)
    24. Swap Nodes in Pairs
    2. Add Two Numbers(2个链表相加)
    92. Reverse Linked List II(链表部分反转)
    109. Convert Sorted List to Binary Search Tree
    138. Copy List with Random Pointer
    为Unity的新版ugui的Prefab生成预览图
    ArcEngine生成矩形缓冲区
  • 原文地址:https://www.cnblogs.com/dcyd/p/12353137.html
Copyright © 2011-2022 走看看