遍历数组常用的方法,map、forEach、filter、reduce...

一、forEach

类似于for循环,是对指定数组进行遍历,不会改变原素组里的元素

语法:forEach(callbackFn)

返回值:undefined

const arr = [1,2,3,4,5]
let b = []
// 将数组arr的元素拷贝到数组b
const a = arr.forEach(element => {
    b.push(element)
    // 就算return了,forEach方法的执行结果还是undefine
    // 就算对元素进行操作了,也不会改变原数组
    return element + 5
})
console.log(b)    // 返回值:[1,2,3,4,5]
console.log(arr)  // 返回值:[1,2,3,4,5]
console.log(a)    // 返回值:undefined

二、map

遍历每一个元素,对原数组中的元素进行指定操作,返回一个新数组,新数组的元素是每次回调函数的返回值

语法:map(callbackFn)

返回值:一个新数组

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

// 将arr中的每一个元素加5,最后作为新数组返回
const newArr = arr.map(element => {
    return element + 5
})
console.log(newArr)

三、filter

遍历每一个元素,将原数组中符合条件的元素过滤出来,形成一个新数组,此方法不会改变原数组

语法:filter(callbackFn)

返回值:一个新数组

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

// 过滤出arr中大于等于3的元素
const newArr = arr.filter(element=>{
    return element >= 3
})
console.log(newArr) // 输出值:[3,4,5]

四、reduce

遍历数组的每一个元素,并将数组元素进行累积,最终返回累计后的结果,此方法不会改变原数组

语法:reduce( callbackFn [,initValue] ),方括号内的参数为可选参数

返回值:累积后的值

回调函数callbackFn中接收的参数:

  • accumulator:每次回调函数return回来的值。初始值为initValue参数的值,若initValue参数未指定则其值为arr[0]
  • currentValue:当前元素的值。在第一次调用时,如果指定了 initialValue,则为 array[0] 的值,否则为 array[1]

initValue:accumulator的初始值,未指定initValue时,若操作的数组为空则会抛出异常

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

// 将arr中的元素进行累加,回调函数执行4次
// 此时未指定initialValue,accumulator的初始值为arr[0],currentValue的值为arr[1]
const result = arr.reduce( (accumulator,currentValue) => {
    return accumulator + currentValue
})
console.log(result) // 返回值:15
const arr = [1,2,3,4,5]

// 将arr中的元素进行累加,回调函数执行五次
// 此时指定initValue的值为0,则accumulator的初始值为0,currentValue的值为arr[0]
const result = arr.reduce( (accumulator,currentValue) => {
    console.log(111)
    return accumulator + currentValue
},0)
console.log(result) // 返回值:15

五、sort

遍历数组,将数组的元素按要求排序,会改变原数组,默认排序是将元素转换为字符串,然后按照它们的 UTF-16 码元值升序排序。

语法:sort(compareFn)

返回值:排序好的数组

compareFn的返回值 a-b 表示升序,b-a表示降序

const arr = [1,10000,34,67,43]

// 不指定排序条件,默认排序
arr.sort()

console.log(arr) // 返回值:[1,10000,34,43,67]
const arr = [25,56,22,15,756]

// 将数组升序排序
arr.sort((a,b) => {
    return a - b
})
console.log(arr) //返回值:[15, 22, 25, 56, 756]
const arr = [25,56,22,15,756]

// 将数组降序排序
arr.sort((a,b) => {
    return b - a
})
console.log(arr) //返回值:[756, 56, 25, 22, 15]

六、some

遍历一遍数组,如果数组中有一个元素满足条件,则结果返回true,一个都不满足则返回false,此方法不会改变原数组

语法:some(callbackFn)

返回值:布尔值

const arr = [1,3,5,6,7]

//检测数组中是否有能被3整除的元素
const result = arr.some( element => {
    return element % 3 === 0
})
console.log(result) // 返回值:true

七、every

遍历数组,如果数组中所有元素都满足条件,则结果返回true,有一个不满足则停止遍历,返回false,此方法不会改变原数组

语法:every(callbackFn)

返回值:布尔值

const arr = [4,8,10,12,16]

//检测数组中的元素是否都可以被4整除,执行3次
const result1 = arr.every( element => {
    return element % 4 === 0
})
console.log(result1) // 返回值:false

//检测数组中的元素是否都可以被2整除,执行5次
const result2 = arr.every( element => {
    return element % 2 === 0
})
console.log(result2) // 返回值:true

八、find

遍历数组,找到第一个符合要求的元素就停止遍历,找不到则返回undefined,该方法不会该改变原数组

语法:find(callbackFn)

返回值:数组元素

const arr = [12,34,56,18,78]

// 找出数组中第一个大于20的元素,执行2次
const result = arr.find( element => {
    return element > 20
})
console.log(result) // 返回值:34

九、findIndex

遍历数组,找到第一个符合要求的元素就停止遍历,找不到则返回-1,该方法不会该改变原数组

语法:findIndex(callbackFn)

返回值:对应元素的索引

const arr = [12,34,56,18,78]

// 找出数组中第一个大于20的元素的索引,执行2次
const result = arr.findIndex( element => {
    return element > 20
})
console.log(result) // 返回值:1

你可能感兴趣的:(JavaScript,javascript,前端,开发语言)