-
Array.isArray(obj)
这是Array对象的一个静态函数,用来判断一个对象是不是数组
var a = [1,2,3];
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
-
indexOf
indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。
indexOf方法还可以接受第二个参数,表示搜索的开始位置。
var a = ['a', 'b', 'c'];
console.log(a.indexOf('b')) // 1
console.log(a.indexOf('y')) // -1
['a', 'b', 'c'].indexOf('a', 1) // -1 从1号位置开始搜索字符a,结果为-1,表示没有搜索到。
-
lastIndexOf
lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。
var a = [1,2,3,3,2,1]
console.log(a.indexOf(2)) //1
console.log(a.lastIndexOf(2)) //4
注意,这两个方法不能用来搜索NaN的位置,即它们无法确定数组成员是否包含NaN。
-
map
map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。
var a = [1, 2, 3, 4, 5, 6]
console.log(a.map(function(e){
return e * e
})) // [1, 4, 9, 16, 25, 36]
console.log(a) //[1, 2, 3, 4, 5, 6]
上面代码中,a数组的所有成员依次执行参数函数,运行结果组成一个新数组返回,原数组没有变化。
map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。
[1, 2, 3].map(function(elem, index, arr) {
return elem * index;
});
// [0, 2, 6]
上面代码中,map方法的回调函数有三个参数,elem为当前成员的值,index为当前成员的位置,arr为原数组([1, 2, 3])。
-
forEach
forEach也是对数组的所有成员依次执行参数函数。遍历数组,参数为一个回调函数,回调函数有三个参数:
1.当前元素
2.当前元素索引值
3.整个数组
var a = [1,2,3,4,5,6];
console.log(a.map(function(e){return e+1}));//[2, 3, 4, 5, 6, 7]
console.log(a); //[1, 2, 3, 4, 5, 6];
a.forEach(function(e,i,array){
array[i]= e + 1;
});
console.log(a); //[2, 3, 4, 5, 6, 7]
forEach方法不返回值,只用来操作数据。这就是说,如果数组遍历的目的是为了得到返回值,那么使用map方法,否则使用forEach方法
-
every()、some()
返回布尔值,表示判断数组成员是否符合某种条件。
它们接受一个函数作为参数,所有数组成员依次执行该函数。该函数接受三个参数:当前成员、当前位置和整个数组,然后返回一个布尔值。
some方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false。
every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false。
var a = [1, 2, 3, 4, 5, 6]
console.log(a.every(function(e, i, arr){
return e < 5
})) //false
console.log(a.some(function(e,i,arr){
return e > 4
})) //true
-
filter
filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。
它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。
var a = [1, 2, 3, 4, 5, 6]
console.log(a.filter(function(e){
return e % 2 == 0;
})) // [2, 4, 6]
console.log(a) //[1, 2, 3, 4, 5, 6]
-
reduce、reduceRight
reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。
reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员)。
有两个参数:
1.回调函数:把两个值合为一个,返回结果
2.value,一个初始值,可选
[1, 2, 3, 4, 5].reduce(function (a, b) {
console.log(a, b);
return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后结果:15
上面代码中,reduce方法求出数组所有成员的和。第一次执行,a是数组的第一个成员1,b是数组的第二个成员2。第二次执行,a为上一轮的返回值3,b为第三个成员3。第三次执行,a为上一轮的返回值6,b为第四个成员4。第四次执行,a为上一轮返回值10,b为第五个成员5。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值15。
var a = [1, 2, 3, 4, 5, 6]
var b = a.reduce(function(v1, v2){ return v1 + v2 }, 100)
console.log(b) // 121
图片源于知乎@水乙上面代码指定参数a的初值为100,所以数组从100开始累加,最终结果为121。注意,这时b是从数组的第一个成员开始遍历。
参考链接
以上大量参考 Array 对象
网友评论