数组循环
数组循环方法:for
循环,forEach()
,for/in
。
一、for
循环
1.使用Object.keys()
参数为对象,返回一个数组,为对象属性名的集合(不可枚举的除外)。IE8+
,然后使用for
循环得到对象的值的集合。
var o={a:1,b:2,c:3};
Object.defineProperty(o,"c",{ //使o中的属性c不可枚举
enumerable:false
});
var keys=Object.keys(o);//得到o中的属性名的集合,keys为一个数组,不可枚举的不能遍历
var arr=[];
for(var i=0,len=keys.length;i<len;i++){
arr.push(o[keys[i]]);
}
arr;//1,2 得到o中可枚举的属性的值的集合
2.过滤数组中为undefined
,null
,NaN
,""
,false
,和不存在的元素(稀疏数组中有不存在的元素)
var arr=[1,2,3,,undefined,null,"",false,NaN];
var p=[];
for(var i=0,len=arr.length;i<len;i++){
if(!arr[i]) continue;
p.push(arr[i]);
}
p;//1,2,3
3.在稀疏数组中过滤掉不存在的元素
var arr=[undefined,1,2,3,,null,"",false,NaN];
var p=[];
for(var i=0,len=arr.length;i<len;i++){
if(arr[i]===undefined && !(i in arr)) continue;
p.push(arr[i]);
}
p;//undefined,1,2,3,null,"",false,NaN
4.在数组中过滤null
元素
var arr=[undefined,1,2,3,,"",null,false,NaN];
var p=[];
for(var i=0,len=arr.length;i<len;i++){
if(arr[i]===null) continue;
p.push(arr[i]);
}
p;//undefined,1,2,3,,"",false,NaN
5.在数组中过滤为undefined
的元素
var arr=[undefined,1,2,3,,"",null,false,NaN];
var p=[];
for(var i=0,len=arr.length;i<len;i++){
if(arr[i]===undefined) continue;
p.push(arr[i]);
}
p;//1,2,3,"",null,false,NaN
二、for/in
1.使用for/in
过滤掉不可枚举的元素
var arr=[1,2,3,4];
var p=[];
Object.defineProperty(arr,"3",{ //使索引为3,即属性名为"3"不可枚举
enumerable:false
});
for(var i in arr){
p.push(arr[i]);
}
p;//1,2,3
1.使用for/in
枚举属性
Array.prototype.run=function(){ //run()返回实例数组索引为0的元素
return this["0"];
};
var arr=[1,2,3];
var p=[];
for(var i in arr){
p.push(i);
}
p;//0,1,2,3 这里0,1,2,3是arr里的索引,arr被枚举了4个元素包括继承属性run
1.使用for/in
过滤继承属性
Array.prototype.run=function(){ //run()返回实例数组索引为0的元素
return this["0"];
};
var arr=[1,2,3];
var p=[];
for(var i in arr){
if(!arr.hasOwnProperty(i)) continue;
p.push(i);
}
p;//0,1,2只枚举了3个属性,过滤了继承属性run
三、forEach()
遍历,IE8+
var arr=[1,2,3,4];
var toal=0;
arr.forEach(function(x){
toal+=x;
});
toal;//10
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。