JavaScript数组方法大合集

首先介绍下创建数组的方法:

  1. 构造函数new Array();
  2. 字面量var arr=[];

下面开始整理数组方法:

1 Array.join()

将数组的元素组成一个字符串,参数为分隔符,省略则默认为逗号。

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

通过join()方法可以实现重复字符串,只需传入目标字符串和重复的次数即可。

function rs(str,n){
    return new Array(n+1).join(str);
}
console.log(rs("sa", 3));//sasasa

2 Array.push()

向数组末尾添加元素,返回修改后数组长度。

var ar=['li','ul','to'];
var co=ar.push("ja",'se');
console.log(ar);//[ 'li', 'ul', 'to', 'ja', 'se' ]
console.log(co);//5

3 Array.pop()

移除数组末尾最后一项,返回移除的项。

var ar=['li','ul','to','ja', 'se'];
var it=ar.pop();
console.log(it);//se
console.log(ar);//[ 'li', 'ul', 'to', 'ja' ]

4 Array.unshift()

向数组头部添加元素,返回修改后数组长度。

var ar=['li','ul','to','ja'];
var uo=ar.unshift('ii','pp');
console.log(uo);//6

5 Array.shift()

移除数组头部最后一项,返回移除的项。

var ar=[ 'ii','pp','li','ul','to','ja'];
var hi=ar.shift();
console.log(hi);//ii
console.log(ar);//[ 'pp', 'li', 'ul', 'to', 'ja' ]

6 Array.sort()

将数组进行排序,默认按照最左边的数字进行排序,而不是数字的大小,返回值为排好的数组。
那么问题来了

var arr1=[19,26,41,3];
console.log(arr1.sort());//[ 19, 26, 3, 41 ];这并不是我想要的结果

所以写一个比较函数吧

function com(v1,v2) {
    if(v1<v2)return -1;
    else if(v1>v2)return 1;
    else return 0;
}
console.log(arr1.sort(com));//[ 3, 19, 26, 41 ];完美

7 Array.reverse()

反转数组项的顺序,原数组改变。

var arr1=[ 3, 19, 26, 41 ];
console.log(arr1.reverse());//[ 41, 26, 19, 3 ]
console.log(arr1);//[ 41, 26, 19, 3 ]

8 Array.concat()

将参数添加到原数组中,返回新构建的数组,若无参数,则复制原数组。

var arr1=[ 41, 26, 19, 3 ];
var arr2=arr1.concat(1,[6,7,8]);
console.log(arr2);//[ 41, 26, 19, 3, 1, 6, 7, 8 ]

9 Array.slice(start,end)

切除索引值start到end间的数组,不包含end索引的值,返回值是切除的数组,原数组不改变,若没传end则切到数组最后一项。

var arr = [1,2,3,4,5]
console.log(arr.slice(1))   // [2,3,4,5]
console.log(arr.slice(1,3))   // [2,3]
console.log(arr)    //  [1,2,3,4,5]

10 Array.splice()

删除:指定2个参数,要删除的第一项的索引和删除的项数。
插入:指定3个参数,起始索引,要删除的项数(0),要插入的项.
替换:指定3个参数,起始索引,要删除的项数(非0),要插入的项.
该方法始终都会返回一个数组,内容为被删除的项,如果没有删除,则返回空数组。

var arr3=[1,2,3,4,5,67,8];
var re=arr3.splice(1,1);
var ch=arr3.splice(2,0,88);
var tih=arr3.splice(5,2,100);
console.log(re);//[2]
console.log(ch);//[]
console.log(tih);//[ 67, 8 ]
console.log(arr3);//[ 1, 3, 88, 4, 5, 100 ]

11 Array.indexOf()

查找某个元素的索引值,参数为要查找的项和起点索引(可选),若有重复的则返回第一个查到的索引值,若不存在则返回-1。

var arr4=[1,2,3,4,5,7,8,5,2,4,5];
console.log(arr4.indexOf(5));//4
console.log(arr4.indexOf(5,5));//7
console.log(arr4.indexOf(88));//-1

12 Array.lastIndexOf()

和indexOf()一样,只不过是从数组末尾向前查找项。

var arr4=[1,2,3,4,5,7,8,5,2,4,5];
console.log(arr4.lastIndexOf(4));//9

13 Array.forEach()

遍历数组,给每一项运行指定函数,无返回值。函数的参数为:遍历的内容,对应的索引,数组本身。

var ar=[ 'pp','li'];
ar.forEach((item,index,a)=>{
console.log(item+'|'+index+'|'+(a==ar))//pp|0|true  li|1|true
})

14 Array.map()

即‘映射’,对数组中的每一项执行指定函数,返回各项结果组成的数组。

var arr3=[ 1, 3, 88, 4, 5, 100 ];
var aee=arr3.map(item=>item*2)
console.log(aee);//[ 2, 6, 176, 8, 10, 200 ];

15 Array.filter()

即‘过滤’,对数组中的每一项执行指定函数,返回符合过滤条件的各项结果组成的数组。

var arr4=[1,2,3,4,5,7,8,5,2,4,5];
var tt=arr4.filter( item => item>4)
console.log(tt);//[ 5, 7, 8, 5, 5 ]

16 Array.every()

判断数组的每一项是否符合条件,必须所有项都符合才会返回true.

var arr = [1,2,3,4,5]
var arr1 = arr.every( item => item < 3)
console.log(arr1)// false
var arr2 = arr.every( item => item < 10)
console.log(arr2)// true

17 Array.some()

判断数组的每一项是否符合条件,只要有一项符合条件就会返回true.

var arr = [1,2,3,4,5]
var arr1 = arr.some( item => item < 3)
console.log(arr1)// true
var arr2 = arr.some( item => item > 6)
console.log(arr2)// false

18 Array.reduce()

从左至右遍历数组的每一项,返回一个累加值。
参数:对每一项执行的函数和(可选)初始值。

var arr = [0,1,2,3,4]
var arr1 = arr.reduce((pre, cur) => 
    pre + cur
)
console.log(arr1)// 10

19 Array.reduceRight()

从右至左遍历数组的每一项,返回一个累加值。
参数:对每一项执行的函数和(可选)初始值。

var arr = [0,1,2,3,4]
var arr1 = arr.reduceRight((pre, cur) => 
    pre + cur
,10)
console.log(arr1)// 20

20 Array.from()

将为数组转化为数组,但必须有length。

var str = '12345'
console.log(Array.from(str))// ["1", "2", "3", "4", "5"]
var obj = {0:'a',1:'b',length:2}
console.log(Array.from(obj))// ["a", "b"]

21 Array.of()

将一组值转化为数组。

var str = '11'
console.log(Array.of(str))// ['11']
Array.of(['1','2'])//[['1','2']]
Array.of()//[]

22 Array.find()

找到第一个符合条件的项。

var arr = [1,2,3,4]
var arr1 = arr.find((value, index, array) =>value > 2)
console.log(arr1)   // 3

23 Array.findIndex()

找到第一个符合条件的项的索引。

var arr = [1,2,3,4]
var arr1 = arr.find((value, index, array) =>value > 2)
console.log(arr1)   // 2

24 Array.fill(target,start,end)

用一个给定的值填充数组,原数组改变。
参数为目标值,起始位置,结束位置(不包含)。

let arr = [1,2,3]
let arr1 = arr.fill(3)
console.log(arr1)  // [3, 3, 3]
console.log(arr)   // [3, 3, 3]
let arr2 = arr.fill(5,1)
console.log(arr2)  // [3, 5, 5]
let arr3 = arr.fill(4,1,2)
console.log(arr3)  // [3, 4, 5]

25 Array.includes()

判断数组中是否包含给定的值,返回布尔值。
该方法可以判断NaN

let arr = [1,2,3]
let arr1 = arr.includes(1)  
console.log(arr1)   // ture
let arr2 = arr.includes(5) 
console.log(arr2)    // false
let arr3 = [1,2,NaN].includes(NaN)
console.log(arr3)  // true

26 Array.keys()

遍历数组键名。

let arr = [1,2,3]
let arr2 = arr.keys()
for (let key of arr2) {
    console.log(key);   // 0,1,2
}

27 Array.values()

遍历数组键值。

let arr = [1,2,3]
let arr2 = arr.values()
for (let value of arr2) {
    console.log(value);   // 1,2,3
}

28 Array.entries()

遍历数组键值和键名。

let arr = [1,2,3]
let arr2 = arr.entries()
for (let a of arr2) {
    console.log(a);   // [ 0, 1 ] [ 1, 2 ] [ 2, 3 ]
}

29 Array.copeWithin(target,start,end)

复制指定位置的数组到其他位置,覆盖原数组项,返回当前数组。

let arr = [1,2,3,4,5,6,7]
let arr1 = arr.copyWithin(1)
console.log(arr1)   // [1, 1, 2, 3, 4, 5, 6]  第0项不变,从第1项开始被原数组覆盖,原数组已改变
let arr2 = arr.copyWithin(1,2)
console.log(arr2)   // [1, 2, 3, 4, 5, 6, 6]  从第1项开始被原数组的第2项到最后一项开始覆盖(2-6),数量不够时则终止
let arr3 = arr.copyWithin(1,2,4)
console.log(arr3)   // [1, 3, 4, 4, 5, 6, 6]  原数组的第2项和第3项覆盖到该数组的第1项和第2项
console.log(arr);   // [1, 3, 4, 4, 5, 6, 6]

声明一下:序号11-19为ES5新增方法,序号20-29为ES6新增方法。

你可能感兴趣的:(数组方法)