美文网首页
js中常用的数组遍历方法

js中常用的数组遍历方法

作者: 超人鸭 | 来源:发表于2019-09-26 11:18 被阅读0次

1. forEach
结合代码看看这种遍历:

var arr = [1,2,3,4,5]

arr.forEach((item) => {
  item = item*2  // 试着在遍历里面改变数组项
})
console.log(arr)  // 为原数组

说明foreach并不会改变原数组,下面试着它会不会返回新的东西

arr = arr.forEach((item) => {
  return item = item*2
})
console.log(arr)  // undefined

打印出来是undefined,说明这个遍历方法也不会返回新值。
但是超人鸭之前试过用foreach改变过数组呀,是我记错了吗,突然想起来,之前改变的都是对象数组,看下面的例子:

var objArr = [{a:1},{a:2},{a:3}]
objArr.forEach((item) => {
  item.a = item.a*2
})
console.log(objArr)   // 出现浅拷贝,2,4,6

可以看到如果对象数组去遍历的话,是会出现浅拷贝,如果你给这个对象添加新属性也是会生效的。所以如果是处理对象数组,就可以用foreach去处理。
那如果不是对象数组呢,想要用foreach改变原数组呢?
foreach有三个参数,第一个是每个数组项,第二个是下标索引,第三个是数组本身,所以可以这么做:

arr.forEach((item,i,arr) => { 
  arr[i] = item * 2
})
console.log(arr)  // 2,4,6,8,10

可以直接用改变数组本身的方法去改变数组。foreach就说这么多。
2.map
map和foreach不一样的是,它会返回一个新数组。

var arr = [1,2,3,4,5]
arr = arr.map((item) => {
  return item*2  
})
console.log(arr)  // 2,4,6,8,10

可以看到map会返回一个新数组,注意在遍历里面要return,如果不return就会出现一个数组项都是undefined的数组。
和foreach一样的是,遍历过程不会改变原数组:

var arr = [1,2,3,4,5]
arr.map((item) => {  // map不会改变原数组
  item = item*2
})
console.log(arr) // 1,2,3,4,5

一样去遍历对象数组会出现浅拷贝:

var objArr = [
  {a:1,b:3},
  {a:2,b:4},
  {a:5,b:7}
]
let objArr2 = objArr.map((item) => {
  item.a = item.a*2
  item.b = item.b*3
  return item
})
console.log(objArr2)
console.log(objArr)  // 出现浅拷贝,和objArr2一样

3.some
some这种遍历数组方法返回的是一个Boolean型的值,当其中一个数组项符合条件时,整个some遍历就会返回ture。描述看不懂,直接看代码。

var arr = [1,2,3,4,5]
var test = arr.some((item) => {
  return item == 3
})
console.log(test) // true

看到有一个数组项符合条件时就会返回true,这里还有一个要注意的点,当some返回true后,就会停止遍历:

arr.some((item) => {
  if(item == 3) {
    return true
  }
  console.log(item) //1,2 // return true的时候就停止遍历
})

如果遍历过程中不返回的话,some会返回什么呢?

var arr = [1,2,3,4,5]
var test = arr.some((item) => {
  item = item * 2
})
console.log(test)  // false

也很好理解,没有返回就是相当返回undefined。some当全部遍历都没有返回ture的时候就会返回false
上面说到当某一次遍历返回true的时候,some就会停止遍历,那当遍历时候返回false呢:

var arr = [1,2,3,4,5]
arr.some((item) => {
  if(item == 3) {
    return false
  }
  console.log(item) //1,2,4,5  // return false的时候会跳过此次遍历,执行下一次
})

可以看到返回遍历返回false的时候并不会停止遍历,但是会跳出那一次遍历,其实就是return的作用。
4.every
every和some用法相似,不同的是,some是有一次遍历返回true的时候,some就会返回true,every是要每一次遍历都返回true时才会返回true:

var arr = [1,2,3,4,5]
var test1 = arr.every((item) => {
  return item > 1
})
console.log(test1) // false

var test2 = arr.every((item) => {
  return item > 0  // 需要每一次遍历都返回true结果才是true
})
console.log(test2) // true

5.filter
filter就是过滤,它会返回一个新数组,是由遍历时符合条件的数组项组成:

var arr = [1,2,3,4,5]
arr = arr.filter((item) => {
  return item > 3
})
console.log(arr)  // 4,5

这里看起来很好理解,但是和上面说的map有点区别,filter是返回符合条件的数组项组成的数组,map是映射,把数组项映射成新的内容,不要搞混哦:

var arr = [1,2,3,4,5]
let arr1 = arr.map((item) => { 
  return  1
})
console.log(arr1)  // 1,1,1,1,1

let arr2 = arr.filter((item) => {
  return 1  // 就是retrun  true
})
console.log(arr2) // 1,2,3,4,5

6.findIndex
findIndex就是查找索引,找到符合条件的数组项的下标,并且找到第一个符合条件后就停止遍历:

var arr = [1,2,3,4,5]
var index = arr.findIndex((item) => {
  if(item === 2) {
    return true
  }
})
console.log(index)  // 1

超人鸭这次就说这几种数组遍历的方法,需要注意的点上面都有说到,还有一点就是基本每一种遍历都有三个参数,数组项、下标、数组本身。

相关文章

  • js基础了解

    js数组常用遍历方法使用: js数组常用操作方法使用: 基本逻辑运算: 基本字符串操作方法:

  • js中数组对象去重的方法

    采用数组中的reduce方法,遍历数组,也是通过对象访问属性的方法 参考js中数组对象去重的方法

  • 数组基础

    数组基础 新建数组 数组方法和属性 数组常用方法 数组的遍历方法

  • JS 数组循环遍历方法的对比

    JS 数组循环遍历方法的对比 JavaScript 发展至今已经发展出多种数组的循环遍历的方法,不同的遍历方法运行...

  • 聊一聊数组的map、reduce、foreach等方法

    聊聊数组遍历方法 JS 数组的遍历方法有好几个: every some filter foreach map re...

  • for循环性能比较

    JS数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,...

  • JS遍历相关知识

    JS数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,...

  • $.each()与forEach()的区别,伪数组是什么

    $.each()是jq中的方法,forEach()是js方法1、$.each()可以遍历伪数组;forEach()...

  • js中数组flat方法的使用和实现

    js中数组flat方法的使用和实现 定义 flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历...

  • 面试题之js数组遍历

    js中的数组遍历是项目中经常用到的,在这里将几种方法做个对比。 for循环:使用评率最高,也是最基本的一种遍历方式...

网友评论

      本文标题:js中常用的数组遍历方法

      本文链接:https://www.haomeiwen.com/subject/lonvuctx.html