foreach的方法:x是元素,index是位置,a是数组本身
Array.isArray:判断是否为数组
实例:Array.isArray(<val>)
返回值:如果<val>时数组,则返回true,否则返回false。
注意:当检测<arr>实例时,isArray方法优于instanceof,因为isArray能检测iframe。
此方法为ES5方法,IE8-不支持。
forEach:遍历数组元素的方法,arr.forEach(function(x,index,a){});//x具体的元素值,index对应的下标,a数组本身
map:数组映射,var arr=[1,2,3];arr.map(function(x){return x+10;});//[11,12,13] arr;//[1,2,3]不会修改原数组
filter:数组过滤,原数组不被修改,arr.filter(function(x,index){})
every:表示每一个元素都要符合一定的条件 var arr=[1,2,3];arr.every(function(x){return x<10;});//true
some:只要任意一个元素符合条件就可以了,every相当于逻辑与,some相当于逻辑或
reduce:数组两个元素两两操作var arr=[1,2,3];arr.reduce(function(x,y){return x+y;},0);//6,这里的0是和1最开始进行相加的,每次结果作为新的x,下一个元素作为y,原数组未被修改
reduceRight:是从右到左开始遍历的,其他的还是跟reduce一样的,都可以将数组聚合成一个结果
indexOf:arr.indexOf(a);//表示元素值为a的所在数组的下标位置,arr.indexOf(a,i)从下标为i的元素开始查找元素值为a的下标位置
lastIndexOf:与indexOf差不多,只不过是从右到左开始查找的,返回元素所在的下标位置
isArray:判断是否为数组,必须用Array构造器对象调用
其他的判断是否数组的方法:
[] instanceof Array;//true
({}).toString.apply([])==='[object Array]';//true
[].constructor === Array;//true
//数组方法下
undefined
var arr = [1,2,3,4,5];
undefined
arr.forEach(function(x,index,a){
console.log(x+'|'+index+'|'+(a===arr));
})
VM6289:3 1|0|true
VM6289:3 2|1|true
VM6289:3 3|2|true
VM6289:3 4|3|true
VM6289:3 5|4|true
undefined
//有些老的版本是不支持foreach方法的
undefined
arr.map(function(x){
return x+10;
})
(5) [11, 12, 13, 14, 15]
//map是一个映射的函数,在函数里面可以传出一个数组内部的值然后return回去一个操作,在这个操作下面会创建一个新的数组,而且原来的数组是不会发生改变的
undefined
arr.filter(function(x,index){
return (x%1)&&(x%x);
})
[]
arr.filter(function(x,index){
return (x%2);
})
(3) [1, 3, 5]
//fiter是一个过滤器,它的作用就是将原来的数组里面的一些值进行一次过滤得到我们想要的值
undefined
arr.every(function(x){
return x<10;
})
true
arr.some(function(x){
return x===3;
}
)
true
//every和some是对数组里面所有的值进行一个遍历,然后判断是否满足某一个条件,every的用法类似于逻辑与,必须所有的都满足才行,而some只要求其中一个满足就可以
undefined
arr.reduce(function(x,y){
console.log(x+'|'+y);
return x>y?x:y;
})
VM6798:3 1|2
VM6798:3 2|3
VM6798:3 3|4
VM6798:3 4|5
5
//reduce是一个比较复杂的办法,可以理解成是一个迭代的过程,先是选取两个数,然后操作一波得到一个数,然后将这个数字作为下一次迭代的第一个数
undefined
arr.reduceRight(function(x,y){
console.log(x+'|'+y);
return x>y?x:y;
})
VM6904:4 5|4
VM6904:4 5|3
VM6904:4 5|2
VM6904:4 5|1
5
arr.indexOf(2)
1
arr.indexOf(1,-1)
-1
//第二个参数是从哪里开始找,这个永远都是向右找,所以第二个结果才会返回-1
undefined
arr.lastIndexOf(1,-1)
0
//这回就找的到了
undefined
//在array构造器上定义了一个判断是否是array的方法叫做isArray
undefined
Array.isArray(arr)
true
//因为是定义在构造器上面的所以只能在上面用
undefined
//当然我们也有一些其他的办法
undefined
arr instanceof Array
true
arr.constructor ===Array
true
//但是构造器属性是可以继承而来的,所以一般来说也不一定准确
四种判断是否是数组的方法
如果reduce不传第二个参数
默认第一个参数(函数)的第一个参数代表数组的第一个值
默认第二个参数(函数)的第一个参数代表数组的第二个值
.reduce:计算数组元素相加后的总和,数组中的每个值(从左到右)开始缩减
.reduceRight:计算数组元素相加后的总和,数组中的每个值(从右到左)开始缩减
arr.map(function(x){})
arr.filter(function(x,index){})
arr.every(function(x){})
arr.some(function(x){})
arr.reduce(function(x,y){}) //用于数组元素两两的逻辑(相加,相乘等)
arr.indexOf();//从左到右,arr.lastIndexOf(),从右往左。
arr.forEach(function(x,index,a){
});
数组检索 indexOf
数组遍历 不修改原数组
1、arr.forEach(function(x,index,arr)) IE9之前不支持
2、arr.map(function(x))
3、filter ,过滤返回
///数组判断,every,每一个满足条件,some,其中一个满足,否则返回false
之前的方法是prototype上的,所有可以在对象上直接调用,但这个是Array构造器对象上的属性,所以不可以直接变量.方法调用,要Array.isArray调用
instanceof Array是构造器方式,[].constructior===Array这个对象的构造器是不是Array
数组的检索,值在数组 的哪个位置,没有返回-1
第二个参数是数字
从左到右,或从右到左
两个数组方法
ervery 和some的方法
数组的过滤
数组的映射
用forEach进行数组的遍历,参数为一个函数
判断是否为数组:
Array.isArray(数组);
数组 instanceof Array;
arr.indexOf(n);返回n元素的下标,若查询不到返回-1
arr.indexOf(n,m);查找n元素,从第m+1个元素开始查找
PS: (n,-m)出现了负数,负数的下标顺序为[-5,-4,-3,-2,-1];从-m的位置开始向右查找n元素
PS:arr.lastindexOf(n);的查找顺序与arr.indexOf(n);相反
reduce 和reduceRight的区别,前者正序后者倒序
arr.reduce执行原理:
首先,如果后面有参数n,那么n+x(x是从数组获取的第一个元素),然后得出的结果赋值给x,然后执行x+y的程序,得出的结果再赋值给x
紧接着,从数组获取第二个元素,此时仅仅是y获取元素,x不再获取元素
,以此类推进行计算。
arr.every()遍历数组并且所有元素要符合条件才为true
arr.some()遍历数组,只要有一个元素符合条件就为true
arr.filter()是筛选出合适的元素并留下来,不影响原来的数组
function(currentValue, index, arr)
currentValue | 必需。当前遍历的元素 |
index | 可选。当前元素的索引值。 |
arr | 可选。当前元素所属的数组对象。 |
Array.prototype.forEach是除了for,for..in之外的数组遍历的一个方法老的浏览器如IE6.7.8不支持
forEach接受一个函数,这个函数在遍历到每个元素的时候调用,
这个函数有三个参数,x:具体的元素的值,index:元素的索引,a:就是arr本身
Array.prototype.map法,不改变原数组
数组映射
Array.prototype.filter不改变原数组
数组过滤
Array.prototype.every&some
数组判断
Array.prototype.reduce&reduceRight
对数组的元素两两操作
arr.reduce(function(x,y){},z);//z可选,若有z,则x的初始值为z,y的初始值为arr[0],函数返回值作为x的下一个值,arr[1]为y的下一个值,以此类推
若没z,则x的初始值为arr[0],y的初始值为arr[1],函数返回值作为x的下一个值,arr[2]为y的下一个值,以此类推
reduceRight与reduce顺序相反
Array.prototype.indexOf&lastIndexOf数组检索
index(ele,startindex);
ele:要查找的元素,startindex查找的起始位置索引,可省略,(从startindex位置开始向后面找)
lastIndexOf与indexOf是相反的顺序,从后往前找
Array.isArray(ES5)
isArray是Array构造器上的属性,不是Array.prototype的,所以不能直接使用,要Array.isArray(要判断的对象);
Array.isArray([]);//true
不能直接isArray([])!!!!
判断是否为数组还可以用以下方法:
[] instanceof Array;//true
Object.prototype.toString.apply([])==='[object Array]';//true
[].constructor===Array;//true,当对象的构造器是从Array继承而来时,此法失效。
forEach:遍历数组元素的方法,arr.forEach(function(x,index,a){});//x具体的元素值,index对应的下标,a数组本身 map:数组映射,var arr=[1,2,3];arr.map(function(x){return x+10;});//[11,12,13] arr;//[1,2,3]不会修改原数组 filter:数组过滤,原数组不被修改,arr.filter(function(x,index){}) every:表示每一个元素都要符合一定的条件 var arr=[1,2,3];arr.every(function(x){return x<10;});//true some:只要任意一个元素符合条件就可以了,every相当于逻辑与,some相当于逻辑或 reduce:数组两个元素两两操作var arr=[1,2,3];arr.reduce(function(x,y){return x+y;},0);//6,这里的0是和1最开始进行相加的,每次结果作为新的x,下一个元素作为y,原数组未被修改 reduceRight:是从右到左开始遍历的,其他的还是跟reduce一样的,都可以将数组聚合成一个结果 indexOf:arr.indexOf(a);//表示元素值为a的所在数组的下标位置,arr.indexOf(a,i)从下标为i的元素开始查找元素值为a的下标位置 lastIndexOf:与indexOf差不多,只不过是从右到左开始查找的,返回元素所在的下标位置 isArray:判断是否为数组,必须用Array构造器对象调用 其他的判断是否数组的方法: [] instanceof Array;//true ({}).toString.apply([])==='[object Array]';//true [].constructor === Array;//true
es5 array.isarray()
indexof 数组检索 -1为倒数第一个元素
得到索引值
reduce 迭代 返回值为 新的x参数