6-3 数组的常见遍历方式

38 阅读2分钟

for 循环 forEach():没有返回值,只是针对每个元素调用func map():返回新的Array,每个元素为调用func的结果 filter:返回付汇func条件的元素数组 some():返回Boolean,判断是否铀元素是否符合func条件 every(): 返回Boolean,判断每个元素是否符合func条件 reduce():接受一个函数作为累加器 for in

let arr = [1, 2, 3]

for 循环

for(let i = 0; i< arr.length; i++){
  if(arr[i] == 2){
    // break
    continue
  }
  console.log(arr[a])
}

forEach()

后面是一个方法作为参数,方法里面有三个参数,第一个是当前正在遍历的对象,第二个是当前正在遍历的索引,第三个参数就是当前正在遍历的数组本身

arr.forEach(function(elem, index, array){
  
  console.log(elem, index)
})

forEach() 不支持 break,也不支持 continue,在循环中无法跳出循环

map()

const result = arr.map(function(value)){
  value += 1
  return value
  // console.log(value)
}
console.log(arr, result) // 1 2 3     2 3 4

forEach() 只是简单的循环,map()会遍历数组里面的每一个元素,根据返回值形成一个新的数组,并不会改变原有数组的值

filter

let result = arr.filter(function(value)){
  console.log(value)
  return value == 2
}
console.log(arr, result) // 1 2 3    2

filter会返回一个新的数组,新的数组是原来的数组经过筛选之后的,并不改变原数组

some()

let result = arr.some(function(value)){
  console.log(value)
  return value == 2
}
console.log(arr, result) // 1 2 3    true

some()只要在数组里面找到一个符合条件的就返回true,如果找不到就返回false

every()

let result = arr.some(function(value)){
  console.log(value)
  return value == 2
}
console.log(arr, result) // 1 2 3    false

every() 判断每个元素是否都符合条件

reduce()

第一个参数表示上一个接收回调的时候所对应的返回值,第一次的时候对应的初始值, 第二个参数表示当前正在处理的参数 第三个参数表示当前正在处理参数的索引 第四个参数表示当前数组

// 求出数组的和
let sum = arr.reduce(function(prev, cur, index, array)){
  return prev + cur
}
console.log(sum) // 6

// 找到当前数组最大的值
let max = arr.reduce(function(prev, cur)){
  return Math.max(prev, cur)
}
console.log(max) // 3

// 对于数组去重
let res = arr.reduce(function(prev, cur){
  prev.indexOf(cur) == -1 && prev.push(cur)
  return prev
}, [])
console.log(res)

for in

Array.prototype.foo = function(){
  console.log('foo')
}
for( let index in arr){
  console.log(index, arr[index])
}

for in 在遍历数组的时候是有问题的,我们不应该使用for in 这种方式去遍历数组