首先介绍下创建数组的方法:
new Array();
var arr=[];
下面开始整理数组方法:
将数组的元素组成一个字符串,参数为分隔符,省略则默认为逗号。
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
向数组末尾添加元素,返回修改后数组长度。
var ar=['li','ul','to'];
var co=ar.push("ja",'se');
console.log(ar);//[ 'li', 'ul', 'to', 'ja', 'se' ]
console.log(co);//5
移除数组末尾最后一项,返回移除的项。
var ar=['li','ul','to','ja', 'se'];
var it=ar.pop();
console.log(it);//se
console.log(ar);//[ 'li', 'ul', 'to', 'ja' ]
向数组头部添加元素,返回修改后数组长度。
var ar=['li','ul','to','ja'];
var uo=ar.unshift('ii','pp');
console.log(uo);//6
移除数组头部最后一项,返回移除的项。
var ar=[ 'ii','pp','li','ul','to','ja'];
var hi=ar.shift();
console.log(hi);//ii
console.log(ar);//[ 'pp', 'li', 'ul', 'to', 'ja' ]
将数组进行排序,默认按照最左边的数字进行排序,而不是数字的大小,返回值为排好的数组。
那么问题来了
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 ];完美
反转数组项的顺序,原数组改变。
var arr1=[ 3, 19, 26, 41 ];
console.log(arr1.reverse());//[ 41, 26, 19, 3 ]
console.log(arr1);//[ 41, 26, 19, 3 ]
将参数添加到原数组中,返回新构建的数组,若无参数,则复制原数组。
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 ]
切除索引值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]
删除:指定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 ]
查找某个元素的索引值,参数为要查找的项和起点索引(可选),若有重复的则返回第一个查到的索引值,若不存在则返回-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
和indexOf()一样,只不过是从数组末尾向前查找项。
var arr4=[1,2,3,4,5,7,8,5,2,4,5];
console.log(arr4.lastIndexOf(4));//9
遍历数组,给每一项运行指定函数,无返回值。函数的参数为:遍历的内容,对应的索引,数组本身。
var ar=[ 'pp','li'];
ar.forEach((item,index,a)=>{
console.log(item+'|'+index+'|'+(a==ar))//pp|0|true li|1|true
})
即‘映射’,对数组中的每一项执行指定函数,返回各项结果组成的数组。
var arr3=[ 1, 3, 88, 4, 5, 100 ];
var aee=arr3.map(item=>item*2)
console.log(aee);//[ 2, 6, 176, 8, 10, 200 ];
即‘过滤’,对数组中的每一项执行指定函数,返回符合过滤条件的各项结果组成的数组。
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 ]
判断数组的每一项是否符合条件,必须所有项都符合才会返回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
判断数组的每一项是否符合条件,只要有一项符合条件就会返回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
从左至右遍历数组的每一项,返回一个累加值。
参数:对每一项执行的函数和(可选)初始值。
var arr = [0,1,2,3,4]
var arr1 = arr.reduce((pre, cur) =>
pre + cur
)
console.log(arr1)// 10
从右至左遍历数组的每一项,返回一个累加值。
参数:对每一项执行的函数和(可选)初始值。
var arr = [0,1,2,3,4]
var arr1 = arr.reduceRight((pre, cur) =>
pre + cur
,10)
console.log(arr1)// 20
将为数组转化为数组,但必须有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"]
将一组值转化为数组。
var str = '11'
console.log(Array.of(str))// ['11']
Array.of(['1','2'])//[['1','2']]
Array.of()//[]
找到第一个符合条件的项。
var arr = [1,2,3,4]
var arr1 = arr.find((value, index, array) =>value > 2)
console.log(arr1) // 3
找到第一个符合条件的项的索引。
var arr = [1,2,3,4]
var arr1 = arr.find((value, index, array) =>value > 2)
console.log(arr1) // 2
用一个给定的值填充数组,原数组改变。
参数为目标值,起始位置,结束位置(不包含)。
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]
判断数组中是否包含给定的值,返回布尔值。
该方法可以判断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
遍历数组键名。
let arr = [1,2,3]
let arr2 = arr.keys()
for (let key of arr2) {
console.log(key); // 0,1,2
}
遍历数组键值。
let arr = [1,2,3]
let arr2 = arr.values()
for (let value of arr2) {
console.log(value); // 1,2,3
}
遍历数组键值和键名。
let arr = [1,2,3]
let arr2 = arr.entries()
for (let a of arr2) {
console.log(a); // [ 0, 1 ] [ 1, 2 ] [ 2, 3 ]
}
复制指定位置的数组到其他位置,覆盖原数组项,返回当前数组。
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新增方法。