js的foreach()、filter()、map()、reduce()

187 阅读2分钟

JS中数组和对象的基本用法

foreach()

foreach()方法用于调用数组的每个元素,并将元素传递给回调函数

let arr = [1, 2, 3, 4, 5, 6]
arr.forEach((item,index,array) => {
  console.log(item,index,array);
  // item表示遍历的当前值,index表示当前索引,array表示被遍历的数组
})

filter()

filter()方法创建一个新的数组,新数组是经过某种判断或者是检测后得到符合条件的所有元素,filter()方法不会对空数组进行检测,不会改变原数组

如下获取数组中所有值大于5的数组

let arr1 = [1,2,3,4,5,6,7,8,9,10]
let newArr1 = arr1.filter((item, index, array) => {
  console.log(item,index,array);
  return item > 5
})

map()

map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值,map()方法按照原始数组元素顺序依次处理元素,不会对空数组进行检测,不会改变原始数组

如下将数组中的元素乘以2

let arr2 = [1,2,3,4,5,6,7,8,9,10]
let newArr2 = arr2.map((item) => {
  return item*2
})
console.log(newArr2);

reduce()

reduce()方法中的元素依次执行回调函数

array.reduce(function(total,currentVal,currentIndex,arr),initValue)

totle为必须参数,表示初始值,或者是计算结果返回的返回值

currentValue为必须参数,表示当前元素

currentIndex为可选参数,表示当前元素的索引

arr为可选参数,表示当前元素所属的数组,也就是array数组

initValue为可选参数,表示传递给函数的初始值

reduce()方法在许多场景都可以使用

如下,计算数组中所有元素的和

let arr = [1, 2, 3, 4, 5]
let sum = arr.reduce((total, currentVal) => {
  return total + currentVal
})
let sum2 = arr.reduce((total,currentVal)=>total+currentVal)
console.log(sum2);   // 15

当然也可以给函数设定一个初始值,如下,

let sum3 = arr.reduce((total, currentVal) => {
  console.log(total,currentVal);
  return total+currentVal
}, 3)
console.log(sum3);   // 18

如下,对数组去重

let arr1 = [1, 1, 3, 2, 4, 5, 6, 1, 7, 4, 3]
let newArr1 = arr1.reduce((total, currentVal) => {
  if (total.indexOf(currentVal) == -1) {
    total.push(currentVal)
  }
  return total
}, [])
console.log(newArr1);   // [1,3,2,4,5,6,7]

let newArr2 = arr1.reduce((total, currentVal) => {
  if (!total.includes(currentVal)) {
    total.push(currentVal)
  }
  return total
}, [])
console.log(newArr2);   // [1,3,2,4,5,6,7]

如下,计算数组中元素出现次数

let names = ['a', 'b', 'c', 'a', 'a', 'd', 'e', 'c']
let countObj = names.reduce((pre, cur) => {
  if (cur in pre) {
    pre[cur]++
  } else {
    pre[cur] = 1
  }
  return pre
}, {})
console.log(countObj); // { a: 3, b: 1, c: 2, d: 1, e: 1 }