数组中的方法要关注其:用法 参数 返回值 是否改变原有数组
1.添加元素(返回值是新的长度)
- unshift:从数组头部添加一个或多个元素
var nums = [3,4,5]; nums.unshift(1,2); print(nums); // 1,2,3,4,5
- push:将一个或多个元素添加到数组尾部
var nums = [1,2,3]; nums.push(4,5); console.log(nums); //[1, 2, 3, 4, 5]
- splice:splice[deletePos,0,[item1,item2,item3....]]将一个或多个元素添加到数组的指定位置,插入位置后面的元素自动后移
var nums = [1,2,3,7,8,9]; var newElements = [4,5,6]; nums.splice(3,0,newElements); print(nums); // 1,2,3,4,5,6,7,8,9
2.删除(返回值是删除的元素)
- pop:移除最后一个元素
var nums = [1,2,3,'Amy','Leo']; nums.pop(); console.log(nums); //[1,2,3,'Amy']
- shift:删除最前一个元素
var nums = [1,2,3,'Amy','Leo']; nums.shift(); console.log(nums); //[2,3,'Amy','Leo']
- splice:splice[deletePos,deleteCount]删除从指定位置deletePos开始的deleteCount个元素
var nums = [1,2,3,'Amy','Leo',55,3]; nums.splice(1,3); console.log(nums); //[1, "Leo", 55, 3]
3.截取合并
- splice:截取一个数组,创建一个新数组
var itDiv = ['Mike','Clayton','John','Marry','Raymon']; var dmpDept = itDiv.splice(2,2); var cisDept = itDiv; console.log(dmpDept); // ['John','Marry'] console.log(cisDept); //['Mike','Clayton','Raymon']
- slice:slice[start,[end]]返回数组的一部分,不包括end对应的元素,如果省略end,将复制start之后的元素
var num1 = [1,2,3,4,55,3]; var num2 = num1.slice(1,4); console.log(num2); //[2, 3, 4]
- concat:可以合并多个数组
var num1 = [1,2,3,4,55,3];
var num2 = ['Marry','Anda','Amy','Leo','Jeo']; console.log(num1.concat(num2)); //[[1, 2, 3, 4, 55, 3, "Marry", "Anda", "Amy", "Leo", "Jeo"]
4.数组拷贝
- arr.slice(0)/arr.splice(0) //返回数组的拷贝数组,一个新数组
- arr.concat() //返回数组的拷贝数组,一个新数组
var num1 = [1,2,3,4,55,3]; var num2 = num1.slice(0); console.log(num2); //[1,2,3,4,55,3] console.log(num1 == num2); //false var num3 = num1.concat(); console.log(num3); //[1,2,3,4,55,3] console.log(num1 == num3); //false
5.数组元素字符串化
arr.join(separator):返回字符串,这个字符串由数组中的所有元素组成,中间用separator链接
var num1 = [1,2,3,4,55,3]; console.log(num1.join(' ')); //1 2 3 4 55 3 用空格隔开 console.log(num1.join('-')); //1-2-3-4-55-3 用'-'隔开
6.替换
splice:splice(deletePos,deletCount,item1,...,itemdeleteCount)从指定位置deletePos开始,替换掉指定数目deletCount的元素
var num1 = [1,2,3,4,55,3]; num1.splice(1,2,'Leo','Amy'); console.log(num1); //[1, "Leo", "Amy", 4, 55, 3]
注:splice和slice的区别:slice会创建一个新数组,而原数组不变;splice会改变原数组
var ary = [12, 23, 34, 45]; // var num1 = ary.slice(-2); //[34,45] // var num1 = ary.slice(8); // [] // var num1 = ary.slice(-9); //[12, 23, 34, 45]; var num1 = ary.slice(3,2); //[] var num1 = ary.slice(-3,2); //[23] var num1 = ary.slice(0,-3); //[12] console.log(num1)
7.扩展
eval->JS中把字符串变为JS表达式执行的一个方法
var ary = [12, 23, 34, 45]; //需要先转化为字符串 console.log(eval(ary.join("+")));
关于console.dir(arr);输出的信息比console.log更多(具体结果可以自行查看)
var a = [3,5,6,1,4,2,'xxx']; //字面量的方式,实例创建方式 new Array(); //console.dir(a); //比console.log更详细;不过其中元素分可枚举和不可枚举的 //length的值是数组的长度 a.length--; //数组长度-1 console.dir(a);
8.数组去重
//->利用对象的键值对方法: obj = {1:3,2:4}; console.log(obj[1]); //1)我们把数组中的每一项的值当做一个对象的属性名和属性值存储起来 //2)但是在每一次存储之前,我们首先判断当前这一项(N)是否在对象中已经存在了->obj[N] // 如果值是N说明对象中已经存在这一项了,也说明了在N之前数组中已经出现过一次N了,说明当前这一项已经重复了,我们在数组中把这一项删除掉 // 如果值是undefined,说明对象中还没有这一项,也就是当前这一项还没有在数组中出现过,我们在把当前项当做对象的属性名和属性值存储进去即可 // i=0 1 obj[1]->undefined {1:1} // i=1 2 obj[2]->undefined {1:1,2:2} // i=2 3 obj[3]->undefined {1:1,2:2,3:3} // i=3 2 obj[2]->2 说明第四项2在之前出现过,我们把第四项删除掉 splice(3,1) ->原有数组改变 var ary = [1, 2, 3, 3, 2, 3, 1, 2, 3, 4, 2, 3, 1, 2, 3, 2, 1, 2, 3]; var obj = {}; for (var i = 0; i < ary.length; i++) { var cur = ary[i]; console.log(obj[cur]); //前三个是undefine if (obj[cur] == cur) {//->说名对象中已经存在cur这一项了,也说明cur在数组中重复了,我们需要把这一项删除掉 //ary.splice(i, 1); ->当前删除,后面每一项的索引都修改了,如果后面有一千万项,非常的耗性能 //->我把数组末尾那一项的值拿过来替换当前项,在把数组末尾那一项的值删除掉 ary[i] = ary[ary.length - 1];//->我把数组末尾那一项的值拿过来替换当前项 ary.length--;//->在把数组末尾那一项的值删除掉 i--; continue; } obj[cur] = cur; } console.log(ary);