数组的一些方法

120 阅读3分钟

不改变原数组的方法

1、ndexOf() 和lastIndexOf()

1.indexof() : 返回元素在数组的第一次出现的索引,从0开始。若数组不存在该元素,则返回-1。

var arr = [1, 2, 2];
arr.indexOf(1); //0
arr.indexOf(10); //-1

2.lastIndexOf(): 返回元素在数组最后一次出现的索引,如果没有出现则返回-1.

var arr = [1, 2, 2];
arr.lastIndexOf(2); //2
arr.lastIndexOf(10); //-1

2、slice()截取数组的一部分,返回一个新的数组,与字符串的substring()方法一样

1.slice(start)一个参数,索引从start开始截取

var arr = [1, 2, 2, 5, 6];
arr.slice(2) // [2, 5, 6]

2.slice(start,end)两个参数,索引从start开始到索引end结束。通常,接受2个参数作为一个左闭右开区间,即包括开始索引位置的元素,但不包括结束索引位置的元素。

var arr = [1, 2, 2, 5, 6];
arr.slice(1,3) // [2, 2]

3.slice()没有参数,则是复制整个数组。

var arr = [1, 2, 2, 5, 6];
arr.slice();

3、concat():合并数组。返回一个新的数组

1.方法的参数可以有多个,也可以任意类型,数值、字符串、布尔值、数组、对象 都可以,参数会被添加到新的数组中。

var arr1 =  [1, 2, 3,4,5,6];
var arr2 = ['a','b','c'];
var arr3 = arr1.concat(arr2);
arr3;   //[1, 2, 3, 4, 5, 6, "a", "b", "c"]

2.注意,如果参数是数组, 会被拉平一次,即数组会被拆开来,加入到新的数组中。

var arr1 = [1, 2, 3];
var arr2 = arr1.concat(66,'abc',true,[10,20],[30,[31,32]],{x:100});
arr2;  //[1, 2, 3, 66, "abc", true, 10, 20, 30, [31,32], {x:100}]

4、join()将数组转换为字符串

它会把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串。 1.参数是用来指定连接的字符串。

var arr = [1, 2, 3];
arr.join('*')   //"1*2*3"

2.如果没有指定参数,默认是用 "," 连接。

var arr = [1, 2, 3];
arr.join()   //"1,2,3"

6、map()数组中的元素为原始数组元素调用函数处理后的值。 map() 方法按照原始数组元素顺序依次处理元素。 注意: map() 不会对空数组进行检测。 注意: map() 不会改变原始数组。

1.对数组的所有成员依次调用一个函数,返回值是一个新数组。

arr.map(function(elem, index, arr) {
    return elem * index;
}); 
//[0, 2, 6]

2.map方法接受一个函数作为参数,该函数调用时,map方法会将其传入3个参数,分别是当前成员、当前位置和数组本身(后2个参数可选)。

arr.map(function(elem, index, arr) {
    return elem * index;
}); 
//[0, 2, 6]

3.map方法还可以接受第2个参数,表示回调函数执行时this所指向的对象。

7、forEach():

与map方法很相似,也是遍历数组的所有成员,执行某种操作。注意:forEach方法一般没有返回值

var arr = [1, 2, 3];
function log(element, index, array) {
    console.log('[' + index + '] = ' + element);
}
arr.forEach(log);
// [0] = 1
// [1] = 2
// [2] = 3

8、filter(): 删选

var arr = [1, 2, 3, 4, 5];
arr.filter(function (elem, index, arr) {
  return index % 2 === 1;
});
//[2, 4]