# 数组遍历
# 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);
}
所以输出的都是枚举属性,不会输出具体的值。
# find 和 findIndex
准确的说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);
# some 和 every
# 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