遍历
for-in
-
只遍历对象自身的和继承的可枚举的属性
Object.prototype.enumer=function(){ console.log("可枚举的"); } var obj={a:1,b:2}; for(var o in obj){ console.log(o); } // a // b // enumer //enumer是继承来的可枚举属性
- 在遍历数组时不建议使用,因为
for-in
遍历不能保证遍历顺序,并且如果数组原型上添加了属性,也会被遍历出来;
建议:
在遍历数组时用for
方法,如果遍历对象用for-in
,再次建议相对for-in
来说,它会遍历出继承来的可枚举对象,所以更建议使用Obect.keys()
方法
forEach
-
按照索引的顺序按个传递给定义的一个函数,并且可以在原数组的基础上进行修改
var arr=[1,2,4,5]; arr.forEach(function(x,i,a){ a[i] = x+1 }) ; // 其中调用函数中有三个参数,x 表示数组中元素,i 表示下标,a 表示数组本身
-
回调过空位,并且保留空位
var arr=[1,2,,,3,4]; arr.forEach(function(x,i,a){ a[i] = x+1 }); arr; // [2, 3, , , 4, 5]
map()
-
将调用的数组的每个元素传递给指定的函数,并返回一个新数组,且函数必须有返回值
var arr=[1,2,3]; arr.map(function(x){ return x * x; }); arr; // [1,4,9]
- 如果是稀疏数组,返回的也是相同方式的稀疏数组;它具有相同的长度,相同的缺失元素;
filter()
- 判断传递函数返回值是
true
还是false
,true
表示此数组元素被添加到返回数组(新数组)中,false 则相反; -
返回一个新数组(通过逻辑判断的),并且返回的是稠密的数组
[1,2,3].filter(function( x , i ,arr ){ return x<3; }); // [1,2] // 其中三个参数和forEach表示的一样;
-
filter()
会跳过稀疏数组中缺少的元素,它的返回数组总是稠密的;
filter的两种用法:
-
用来压缩稀疏数组
var dense = sparse.filter(function(){ return true; });
-
压缩空缺并删除undefined和null元素:
a = a.filter(function(x){ return x !==undefined && x !=unll; });
every() / some()
两者都是通过对数组元素应用指定的函数进行判定,返回true
或者false
;
-
every()
当且仅当针对数组中的所有元素通过判断都是true
时,函数返回true
,如果有一个为false
,那么函数返回false
; -
some()
当数组中有一个元素通过判断是true
时,函数返回true
;如果要返回false
,必须所有元素都返回false
才可以;[1,3,5].every(function(x){ return x<8 ; }); // true 元素都返回true [1,2,4].some(function(x){ return 4 % 4 === 0; }) // true 有一个元素返回true
- 两者都是确认返回什么值,它们就会停止遍历数组元素;
- 在空数组上,
every()
返回true
,some()
返回false
;
reduce()
- 使用指定的函数将数组元素进行组合,生成单个值,有两个参数:
-
第一个参数是执行化简的函数(化简函数就是用某种方法把两个值组合或化简为一个值,并返回化简后的值),第二个参数是一个传递给函数的初始值;
var arr=[1,2,4]; var brr=arr.reduce(function(res,x,i,arr){ // 其中 res 表示每次化简后的值,x 表示数组元素,i 表示数组下标,arr 表示数组本身 return res + x; },1); brr; // 8
其中1是初始值,初始值存在的时候,res首先赋初始值,
x
赋数组第一个元素,进行运算之后,res
赋返回的值,x
赋数组的第二个元素 ......,如果初始值不存在,那么res
,x
分别赋数组第一个和第二个元素,以此类推 ......; -
在空数组中,不带初始值参数调用
reduce
将会报错var arr=[]; var brr=arr.reduce(function(res,x){ return res+x; }); // TypeError: Reduce of empty array with no initial value
- 如果数组只有一个值且没有指定初始值,或者有一个空数组且指定一个初始值,
reduce
只会返回那个值,不会调用化简函数;
reduceRight()
- 工作原理和
reduce
一样,不同的是它按照数组索引从高到低(从左到右)处理数组
for...of...遍历
暂无
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。