数组常用方法总结

一、数组检测

对于一个网页或者一个全局作用域而言,使用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
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值