1. forEach(循环)
- forEach 循环在所有元素调用完毕之前是不能停止的,它没有 break 语句
- 可用 try catch 语句,就是在要强制退出的时候,抛出一个 error 给 catch 捕捉到,然后在 catch 里面 return,这样就能中止循环了
- forEach 循环可以修改原来的数组
let arr = [1,2,3];
arr.forEach(function(val,index){
console.log(val,index)
})
// 1 0
// 2 1
// 3 2
2. map(映射)
- 跟forEach功能类似,但会返回一个新数组,数组中的元素 由 原始数组元素调用函数处理后的值
- map()会分配内存空间存储新数组并返回,forEach()不会返回数据。所以 map()的执行速度 > forEach()的执行速度
let arr = [1,2,3];
let tt = arr.map(function(i){
i *= 2
console.log(i)
return i
})
// [2,4,6]
3. reduce(累计)
- 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
- 对于空数组是不会执行回调函数的
function callback(total, currentValue, currentIndex, arr){
// 计算代码块
},
arr.reduce(callback, initialValue)
callback (执行数组中每个值的函数,包含四个参数)
1、total (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、currentIndex (当前元素在数组中的索引)
4、arr (调用 reduce 的数组)
initialValue (作为第一次调用 callback 的第一个参数。)
如果没有提供initialValue,reduce 会从索引1(第二个元素)的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始
不设置初始值,调用空数组会报错。
用法:
数组求和:
let arr = [1,2,3];
let sum = arr.reduce((x,y)=>x+y)
计算每个元素出现的次数:
let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let nameNum = names.reduce((pre,cur)=>{
if(cur in pre){
pre[cur]++
}else{
pre[cur] = 1
}
return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}
数组去重:
let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(newArr);// [1, 2, 3, 4]
二维数组转化维数组:
let arr = [[0, 1], [2, 3], [4, 5], 8]
let newArr = arr.reduce((pre,cur)=>{
return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]
多维数组转化一维数组:
let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]
resuceRight()函数和reduce类似,不过是倒序
4. filter(过滤)
- filter对数组进行过滤,创建一个新数组,新数组中的元素由符合条件的所有元素组成
- filter()不会对空数组进行检测、不会改变原始数组
let arr = [1,2,3];
let tt = arr.filter(function(i){
return i>1;
})
// [2,3]
5. some(是否有一个满足条件)
- 检测数组中的元素是否满足指定条件
- 如果有一个元素满足条件,则返回true , 剩余的元素不会再执行检测。
- 如果没有满足条件的元素,则返回false。
let arr = [1,2,3];
let tt = arr.some(function(i){
return i>1;
})
// true
6. every(是否所以都满足条件)
- 检测数组所有元素是否都符合指定条件
- 如果数组中检测到有一个元素不满足,则返回 false ,且剩余的元素不会再进行检测。
- 如果所有元素都满足条件,则返回 true。
let arr = [1,2,3];
let tt = arr.every(function(i){
return i>0;
})
// true
7. indexOf(搜索元素值返回位置)
// 语法: array.indexOf(item, start) --------- item 搜索的值, start 从哪里开始
let fruits = ["Apple", "Orange", "Apple", "Mango"]
let a = fruits.indexOf("Apple") // 0
Array.lastIndexOf() 与 Array.indexOf() 类似,但是从数组结尾开始搜索。
8. find(返回符合条件的第一元素值)
老旧的浏览器不支持
var numbers = [4, 9, 16, 25, 29]
var first = numbers.find((value, index, array) => {
return value > 18
}) // 25
findIndex() 与 find()类似,findIndex() 方法返回符合条件的第一个元素的索引