数组和对象的遍历

数组一般我们是用for循环来遍历

var arr=[1,2,3,4,5]
for(var i=0;i<arr.length;i++){
  console.log(arr[i])
}

地球人都能看的懂这段代码,不解释 
数组有个forEach(_)方法,也是个遍历,没有返回值

var arr=[1,2,3,4,5]
arr.forEach(function(item,index){
  console.log(index,item)
})

大家都知道,一般我们遍历对象的时候,用的方法是for in

var obj={
  a:1,
  b:2
}
for(var key in obj){
  console.log(key,obj[key])
}

数组为什么不用这个方法呢?试试看,会是什么样子的结果

var arr=[1,2,3,4,5]
for(var i in arr){
  console.log(i,arr[i])
}

这样子是可以的,但是!

var arr=[1,2,3,4,5]
arr.name="hello"
for(var i in arr){
  console.log(arr[i])    //1 2 3 4 5 hello
}

结果全部遍历出来了,数组也是对象嘛,也是可以添加属性的,这样子会把自己添加的属性也遍历出来 
我们可以自己写一个函数,同时实现数组和对象的遍历

function forEachs(arr, fn) {
  var key
  if (arr instanceof Array) {
  arr.forEach(function(item,index){
    fn(item,index)
  })
  }else if(arr instanceof Object){
    for(key in arr){
      fn(key,arr[key])
    }
  }
}

测试一下,先来数组的

var arr=[1,2,3]
forEachs(arr,function(item,index){
  console.log(index,item)
})

ok,没问题,再来看看对象的

var obj={
  a:1,
  b:2
}
forEachs(obj,function(key,value){
  console.log(key,value)
})
原文地址:https://www.cnblogs.com/yiyistar/p/6530519.html