一、数组检测
对于一个网页或者一个全局作用域而言,使用instanceof操作符即可判断某个值是否是数组。但是如果网页中包含多个框架,这样就存在两个不同的全局执行环境,从而存在两个不同版本的Array构造函数,这样就会判断不准确。所以使用Array.isArray()方法来进行判断。
var arr = [10,20,30];
console.log(typeof arr);//object
console.log(arr instanceof Array);//true 在同一个全局作用域下可以这么判断
console.log(Array.isArray(arr));//true
二、数组序列化
toString()在默认情况下都会以逗号分隔字符串的形式返回数组项
var arr = [10,20,30];
console.log(arr);//[ 10, 20, 30 ]
console.log(arr.toString());//10,20,30
join()使用指定的字符串用来分隔数组字符串
var arr = [10,20,30];
console.log(arr);//[ 10, 20, 30 ]
console.log(arr.join('--'));//10--20--30
JSON
使用JSON.stringify()对数组进行序列化,使用JSON.parse()对 数组进行反序列化,注意JSON无法解析方法。
function hello(){
console.log('hello');
}
var arr = ["terry",10,true,[1,2,3],{age:20},hello];
console.log(arr);//[ 'terry', 10, true, [ 1, 2, 3 ], { age: 20 }, [Function: hello] ]
var a = JSON.stringify(arr);
console.log(a);//["terry",10,true,[1,2,3],{"age":20},null]
var b = JSON.parse(a);
console.log(b);//[ 'terry', 10, true, [ 1, 2, 3 ], { age: 20 }, null ]
三、栈,队列方法
改变原数组
pop()
移除数组最后一项并返回该值,同时使数组长度减一;
var arr = [10,20,30];
var a = arr.pop();
console.log(a,arr,arr.length);//30 [ 10, 20 ] 2
push()
可接受任意类型的参数,将它们逐个添加到数组的末尾,并返回数组的长度
var arr = [10,20,30];
var a = arr.push(40);
console.log(a,arr,arr.length);//4 [ 10, 20, 30, 40 ] 4
shift()
移除数组中的第一个项并且返回该项,同时将数组的长度减一
var arr = [10,20,30];
var a = arr.shift();
console.log(a,arr,arr.length);//10 [ 20, 30 ] 2
unshift()
在数组的前端添加任意个项,并返回数组的长度
var arr = [10,20,30];
var a = arr.unshift(0);
console.log(a,arr,arr.length);//4 [ 0, 10, 20, 30 ] 4
四、排序
reverse()
反转数组项的顺序,改变原数组
var arr = [10,20,30];
arr.reverse();
console.log(arr);//[ 30, 20, 10 ]
sort()
默认排序:该方法会调用每个数组项的toString() 方法,然后按照字符序列排序,
var arr = [1,77,8,23,15,35,5,64,];
arr.sort();
console.log(arr);//[1, 15, 35, 5, 64, 77, 8]
如果是数组中全是number类型,可以加入一个简易函数实现排序。
var arr = [1,77,8,23,15,35,5,64,];
function rank(a,b){
return a-b
}
arr.sort(rank);
console.log(arr);//[1, 5, 8, 15, 23, 35, 64, 77]
五、截取方法
concat()
数组拼接,先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,返回副本,不改变原数组
var arr = [10,20,30,40];
var a = arr.concat([50,60]);
console.log(arr,a);//[ 10, 20, 30, 40 ] [ 10, 20, 30, 40, 50, 60 ]
slice()
数组切割,可接受一个或者两个参数(返回项的起始位置,结束位置),当接受一个参数,从该参数指定的位置开始,到当前数组末尾的所有项。当接受两个参数,起始到结束之间的项,但是不包含结束位置的项,不改变原数组
var arr = [10,20,30,40];
var result = arr.slice(1,3);
console.log(result,arr);//[ 20, 30 ] [ 10, 20, 30, 40 ]
splice()
向数组的中部插入数据将始终返回一个数组,该数组中包含从原始数组中删除的项。改变原数组
删除:指定两个参数(起始位置,要删除的项数)
var arr=[10,20,30,40];
var result = arr.splice(1,3);
console.log(result,arr);//[ 20, 30, 40 ] [ 10 ]
插入:指定三个参数(起始位置,0,要插入的任意数量的项)
var arr=[10,20,30,40];
var result = arr.splice(1,0,25,true,'hello');
console.log(result,arr);//[] [ 10, 25, true, 'hello', 20, 30, 40 ]
替换:指定三个参数(起始位置,要删除的项数,要插入的任意数量的项)
var arr=[10,20,30,40];
var result = arr.splice(1,2,25,true,'hello');
console.log(result,arr);//[ 20, 30 ] [ 10, 25, true, 'hello', 40 ]
六、索引方法
indexOf()
从数组开头向后查找,使用全等操作符,返回元素的索引,找不到该元素返回-1。第一个参数为要查找的项,第二个参数(可选)为索引开始位置。
var arr=[10,20,30,40];
console.log(arr.indexOf(30,1));//2
var arr=[10,20,'30',40];
console.log(arr.indexOf(30,1));//-1
lastIndexOf()
与indexOf()方法相同,只是从数组末尾向前查找;
七、迭代方法
every()
对数组中的每一元素运行给定的函数,如果该函数对每一项都返回true,则该函数返回true
var arr = [1,13,5,27,9,32,4,26,8,10];
var result = arr.every(function(item,index,arr){
return item > 2;
});
console.log(result);//false
filter()
对数组中的每一项运行给定的函数,会返回满足该函数的项组成的数组
var arr = [1,13,5,27,9,32,4,26,8,10];
var result = arr.filter(function(item,index,arr){
return item >= 10;
});
console.log(result);//[ 13, 27, 32, 26, 10 ]
map()
对数组中的每一元素运行给定的函数,返回每次函数调用的结果组成的数组
var arr = [1,13,5,27,9,32,4,26,8,10];
var result = arr.map(function(item,index,arr){
return item *2;
});
console.log(result);//[ 2, 26, 10, 54, 18, 64, 8, 52, 16, 20]
forEach()
对数组中的每一元素运行给定的函数,没有返回值,常用来遍历元素
var arr = [1,13,5,27,9,32,4,26,8,10];
arr.forEach(function(item,index){
console.log(index+':'+item)
});
//0:1
//1:13
//2:5
//3:27
//4:9
//5:32
//6:4
//7:26
//8:8
//9:10