上篇:数组(一)
目录
迭代
ECMAScript5为数组定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选)运行该函数的作用域对象。这些方法都不会修改原来数组中的值。
传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置(即索引)和数组对象本身。
every()
对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true,否则返回false,相当于与的关系。
// 判断是否都大于10
var arr = [666,1,2,3,4,5,66,7,888,9,0];
var arr2 = arr.every(function (item,index,array) {
return (item>10); // 查询是否满足条件,遇到false就终止
})
console.log(arr2);
some()
和every()不同的是,只要传入的函数对数组中的某一项返回true,就返回true,可以用来判断某个对象是否在数组中,相当于或的关系。
// 判断是否有大于10的数
var arr = [666,1,2,3,4,5,66,7,888,9,0];
var arr3 = arr.some(function (item,index,array) {
return (item>10); // 查询是否满足条件,遇到true就终止
})
console.log(arr3);
console.log(arr);
filter()
利用指定的函数中return语句条件,将符合该条件的数组项目组合成一个新的数组返回。
var arr = [666,1,2,3,4,5,66,7,888,9,0];
var arr4 = arr.filter(function (item,index,array) {
return (item>50);
})
console.log(arr4);
map()
返回一个新的数组,这个新的数组的每一项都是在原来数组中的对应项目传入函数经过一系列处理的结果。
// 给数组中的每一项都进行同样的操作,如这里都乘以10
var arr = [666,1,2,3,4,5,66,7,888,9,0];
var arr5 = arr.map(function (item,index,array) {
return item*10;
})
console.log(arr5);
console.log(arr); // 验证不会改变原来数组的值
forEach()
这个方法没有返回值,本质上和使用for循环迭代数组一,该方法可以修改原来的数组。该方法的循环没有终止条件,不会受关键字跳出循环或结束循环,一旦执行起来直至遍历完所有的数组内容才结束。
var arr = [666,1,2,3,4,5,66,7,888,9,0];
arr.forEach(function (item,index,array) {
console.log('索引为'+index+'的值是:'+item); // 遍历数组
array[index] = item*1000; // 这个方法可以修改原来的数组
});
console.log('修改后的原数组结果:',arr);
sort()方法进行排序
sort()方法可以传入一个参数, 该参数必须为一个函数(被称为比较函数),比较函数接收两个参数。特别注意, 任意两个数组项目的排列顺序是由返回参数决定的
参数有三类, 负数, 正数和0 , 不论比较算法是啥, 反正数组最后的排序结果就按照参数所规定的的来。如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。
var arr = [666,1,2,3,4,5,66,7,888,9,0];
var arr1 = arr.sort(function (item1,item2) {
if (item1<item2){
return -1;
}else if(item1>item2){
return 1;
}
else{
return 0;
}
});
console.log('检查sort方法修改了原来的数组,结果为:',arr);
归并
ECMAScript5新增了两个归并数组的方法:reduce()和reduceRight()。
这两种方法都会迭代数组的所有项,然后构建一个最终返回的值,其中reduce()方法从数组的第一项开始,逐个遍历到最后。而reduceRight()则从最后一项开始,向前遍历到第一项。
参数:
- 这两个方法都接收两个参数:一个函数和(可选的)作为归并基础的初始值。如果没有第二个参数则会通过数组多取一位进行运算,如果有第二个参数就用第二个参数与数组的第一个位进行运算。
- 传入到reduce()和reduceRight()的函数接收4个参数:前一个值、当前值、项的索引和数组对象。
// 归并,以累乘为例
var num = [1,2,3,4,5,6,7,8,9];
var arr6 = num.reduce(function (prev,cur,index,array) {
console.log(prev,cur,'下标为'+index);
return prev*cur;
})
console.log('没有给定初始值参数的结果:'+arr6);
var arr7 = num.reduce(function (prev,cur,index,array) {
console.log(prev,cur,'下标为'+index);
return prev*cur;
},10) // 给定第二个初始值参数时,初始值作为第一步的prev被使用
console.log('给定初始值参数的结果:'+arr7);