js数组拓展

  • 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 对象

你可能感兴趣的:(js数组拓展)