# 数组遍历

# for 循环

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

# forEach()方法

  • forEach()是最简单、最常用的数组遍历方法
  • forEach不会改变数组本身的值
  • 它提供一个回调函数用于处理数组中的每一个元素
  • 默认没有返回值
  • 不能用return中止循环
  • 使用break中止循环会报错 语法:forEach((当前循环的元素,该循环元素的下标(可选),数组本身)=>{})
let arr = [1, 2, 3]
arr.forEach(item => {
    console.log(item)
})

# map方法

数组元素的映射,它提供一个回调函数,默认返回一个数组,这个新数组的每一个元素都是原数组执行了回调函数之后的返回值

map方法不会改变原始数组

forEach最大的区别就是map可以通过return可以改变输出值,但是不改变原数组值 语法:map((当前循环的元素,循环元素的下标,原数组))

let arr = [1, 2, 3]
let res = arr.map((item, index) => {
    return item * (index + 1)
})
console.log(res)

# for-of循环

  • for-of可以迭代很多东西,包括包括 [Array],[Map],[Set],[String],[TypedArray]对象等等。在这里只解释一下在数组中的迭代。
  • 与forEach的不同点就是支持return break和continue等操作。 语法:for (当前循环的元素 of 被循环的数组){}
 var arr = [1, 2, 3, 4, 7, 8, 9];
for (value of arr) {
    console.log(value);
}

# for-in循环

  • For-in 在数组遍历的时候与for-of不同的是他遍历枚举属性,而像数组的值不是可枚举属性。可以说for-in不是合适的遍历数组的方法。
  • For-in循环可用于遍历对象

举个简单的例子,这篇就不涉及for-in和for-of的更详细的内容了,只需要知道for-in是遍历枚举属性的方法,他不适合遍历数组就OK了。

 var arr = [1, 2, 3, 4, 7, 8, 9];
for (value in arr) {
    console.log(value);
}

所以输出的都是枚举属性,不会输出具体的值。

# findfindIndex

准确的说find不是遍历数组的,而是寻找数组中的具体的值的作返回的一个方法。他和findIndex非常相像,findIndex是返回具体的索引的。

他是由数组继承的Array对象的原型方法,所以直接在数组上调用,他的方法体内需要一个回调函数,在数组每一项上执行的函数

find方法若值存在用户寻找数组中的某个值,则返回当前数组,如不存在则返回undefined(没有找到符合要求的元素) 如果找到满足条件的元素,将不再继续往下执行

var arr = [1, 2, 3, 4, 7, 8, 9];
const res = arr.find(element => element > 3)
console.log(res);

# findIndex()方法返回数组中通过测试的第一个元素的索引(作为函数提供)。

方法返回数组中通过测试的第一个元素的索引(作为函数提供)。 find方法若方法体返回 true 值的数组元素,则findIndex()返回该数组元素的索引(并且不检查剩余值) 否则返回 -1

# filter方法

这个准确的说也不是用来遍历的,顾名思义,它是用来筛选数组的。同样,它里面放一个回调函数,函数里面放三个参数 语法:filter((数组中当前处理ide元素,当前数组元素的索引,数组本身)=>{})

 var arr = [1, 2, 3, 4, 7, 8, 9];
const res = arr.filter(element => element > 3)
console.log(res);

# someevery

# some方法

  • some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
  • some() 方法会依次执行数组的每个元素:
  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。 语法:some((数组中当前处理ide元素,当前数组元素的索引,数组本身)=>{})
    var arr = [1, 2, 3, 4, 7, 8, 9];
let res = arr.some(element => element > 10)
console.log(res);
res = arr.some(element => element > 8)
console.log(res);
res = arr.some(element => element < 10)
console.log(res);

注意

  • some() 不会对空数组进行检测。
  • some() 不会改变原始数组。

# every方法

  • every()方法用于检测数组中的所有元素是否都满足指定条件(该条件为一个函数)
  • every()方法会遍历数组的每一项,如果有有一项不满足条件,则表达式返回false,剩余的项将不会再执行检测
  • 如果遍历完数组后,每一项都符合条,则返回true。

    注意

    • every() 不会对空数组进行检测
    • every() 不会改变原始数组 :::
 var arr = [1, 2, 3, 4, 7, 8, 9];
let res = arr.every(element => element > 3)
console.log(res);
let res = arr.every(element => element > 0)
console.log(res);

# reduce方法

educe()方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值. 回调函数执行数组中每个值的函数(也可以叫做reducer),包含4个参数. reduce((上一次调用回调返回的值,或者是提供的初始值,数组中当前被处理的元素,当前元素在数组中的索引,调用reduce的数组)=>{})

 var arrString = 'abcdaabc'
// 获取字符中中每个字母出现的次数
let count = arrString.split('').reduce(function (res, cur) {
    res[cur] ? res[cur]++ : res[cur] = 1
    return res
}, {})
console.log(count)

# 反向累加方法

reduceRight() 方法将一个函数应用于累加器和数组中的每个元素(从右到左)
用法与reduce()方法相同1

上次更新: 11/3/2023, 5:23:20 PM