对比for of 和for in,以及所有数组遍历方法

说说遍历for in 和for of

for in
  • 遍历的是key(Object.keys也可以)

  • 会遍历原型上的key

  • 遍历数组会不按照顺序

  • 可以中断

  • 遍历的的是key

var obj = {
    a:13,
    b:23,
    c:33
}
for( var key in obj){
    console.log(key);
}
  • 会遍历原型上的key
var obj = {
    a:13,
    b:23,
    c:33
}
Object.prototype.pro = 'pro'
for( var key in obj){
    console.log(key);
}
// a b c pro

解决办法: hasOwnProperty
for( var key in obj){
    if(obj.hasOwnProperty(key)){
        console.log(key);
    }
}
// a b c

  • 可以中断
for( var key in obj){
    if(key==='b'){
        continue
    }
    console.log(key);
}
// a c

for of

  • 遍历的是有迭代器对象(数组 字符串 map set)集合的值
var obj = 'abc'
for( var key of  obj){
    console.log(key);
}
// a b c

var obj = ['A', 'B']
for( var key of  obj){
    console.log(key);
}
// A B

  • 不能遍历对象(对象没有迭代器)
  • 也可以响应break continue

map

遍历所有元素,每次遍历返回的值,就是当前元素遍历后变成的值
返回新的数组

filter

遍历是返回为true的元素才会被返回
var arr = [1,4,6]
var res  = arr.filter( val => {
    return val === 4
})
console.log(res) // [4]

some

找到符合的立即返回,不会遍历所有
var arr = [1,4,6]
var res  = obj.some( val => {
    console.log(val);
    
    return val === 4
})
console.log(res);// 1 4



find

返回符合条件的第一个元素,然后终止遍历
var arr = [1,99,4,66,77]
var find = arr.find(function(element) {
    console.log(element);
    return element > 10;
  });

console.log('find---' + find)  
1
99
find---99

findIndex

返回符合条件的第一个元素的位置,然后终止遍历
var arr = [1,99,4,66,77]
var find = arr.find(function(element) {
    console.log(element);
    return element > 10;
  });

console.log('find---' + find)  
1
99
find---1


reduce

高级用法
var arr = [2,4,6]
arr.reduce((accumulator,currentVal) => {
  return accumulator + currentVal
},initialVal)
// 没有initialVal时:accumulator:arr[0],curentVal:arr[1]
// 有initialVal时:accumulator:initialVal,curentVal:arr[0]
// 

var arr = [[1],[3]]
var res = arr.reduce((accumulator,currentVal) => {
    return accumulator.concat(currentVal)
  return accumulator + currentVal
},[])
console.log(res);[1,3]

flat

var arr = [[1],[3]]
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]]
var res = arr.flat()
var res1 = arr1.flat()
console.log(res); // [1,3]
console.log(res); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

reduce实现 flat


function flatDeep(arr){
    return arr.reduce( (acc,val) => 
        Array.isArray(val) ? acc.concat(flatDeep(val)) : acc.concat(val)
    ,[])
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值