数组一般我们是用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) })