数组去重
...set(array)去重
{ let array = ['aa',12,'aa',16,12,'ab']; function dedupe(array) { //es6 return [...new Set(array)] } dedupe(array); //等价于 Array.from(new Set(array));}
array.filter()方法去重
{ let array = ['aa',12,'aa',16,12,'ab']; array.filter((item, index) => { return array.indexOf(item) == index; });}
数组翻转
reverse()
{ let arr = ['a','b','c',1,3]; arr.reverse(); }
返回结果: [3, 1, "c", "b", "a"]
连接两个或多个数组
concat() 方法
concat() 方法用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本
arr0.concat(arr1, arr2, arr3, ......, arrx);例:{ [1,2,3].concat(4,5) [1,2,3].concat([4,5],6) [1,2,3].concat([4,5],[6,7,8])}
返回结果:
[1, 2, 3, 4, 5][1, 2, 3, 4, 5, 6][1, 2, 3, 4, 5, 6, 7, 8]... 方法
es6 扩展运算符,最简单的写法,一万个推荐!!!
{ let arr = ['1s','2s','3s',4]; let arr2 = ['1a','2a']; console.log([...arr,...arr2]);}
返回结果:["1s", "2s", "3s", 4, "1a", "2a"]
push() 方法
push()把一个或多个参数附加在数组末尾,返回数组长度。改变数组自身。
{ let a = ['a','b','v']; let b = ['c','d','g']; a.push(...b) console.log(a)}
返回结果:["a", "b", "v", "c", "d", "g"]
注意: push()方法返回的是数组长度,如上示例,console.log(a.push(...b))返回值为6unshift() 方法
unshift()把一个或多个参数插入到数组头部,返回数组长度。改变数组自身。
{ let arr = [1, 2, 3]; let count = arr.unshift(4, 5); console.log(count); console.log(arr); }
返回结果:
5[4, 5, 1, 2, 3]数组与字符串相互转化
数组转字符串
join()方法,Array.join(标识符)
{ ['as2',12,'ss'].join('/');}
返回结果:"as2/12/ss"
字符串转数组
split()方法,string.split(标识符)
{ "as2/12/ss".split('/')}
返回结果:["as2", "12", "ss"]
数组删除、插入、替换
arrayObject.splice(index,howmany,item1,.....,itemX)
参数描述:
index:必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。howmany:必需。要删除的项目数量。如果设置为 0,则不会删除项目。item1, ..., itemX 可选。向数组添加的新项目。返回值:类型描述:Array 包含被删除项目的新数组,如果有的话。说明:splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
splice插入操作
示例:在 aa 和 bb 之间插入 aabb
{ let str = ['aa','bb',123,'sd13cx','jj',45]; str.splice(1,0,'aabb'); console.log(str)}
返回结果:["aa", "aabb", "bb", 123, "sd13cx", "jj", 45]
拓展练习:
在 aa 和 bb 之间批量插入 ab、aabb、aaabbb
{let str = ['aa','bb',123,'sd13cx','jj',45];str.splice(1,0,'ab','aabb','aaabbb');console.log(str);
}
返回结果:["aa", "ab", "aabb", "aaabbb", "bb", 123, "sd13cx", "jj", 45]深层拓展:
es6方法,使用‘...’扩展运算符
{ let str = ['aa','bb',123,'sd13cx','jj',45]; let arr = ['ab','aabb','aaabbb']; //巧用es6 "..." str.splice(1,0,...arr); console.log(str);}
splice替换操作
示例:把 123 替换为 ccdd
{ let str = ['aa','bb',123,'sd13cx','jj',45]; str.splice(2,1,'ccdd'); console.log(str)}
返回结果:["aa", "bb", "ccdd", "sd13cx", "jj", 45]
拓展练习:
把 123 替换为 1234、12345
{ let str = ['aa','bb',123,'sd13cx','jj',45]; str.splice(2,1,1234,12345); console.log(str);}
返回结果:["aa", "bb", 1234, 12345, "sd13cx", "jj", 45]
splice删除操作
示例:把 123 删除
{ let str = ['aa','bb',123,'sd13cx','jj',45]; str.splice(2,1); console.log(str)}
delete删除操作
{ let arr = ['aaa',111,222]; delete arr[1] console.log(arr,arr.length) //delete 只删除值,不删除引用空间}
返回结果:["aaa", empty, 222] 3
数组排序
冒泡排序
{ let array = [1,4,-8,-3,6,12,9,8]; let bubbleSort = function(arr){ for(let i = 0;i < arr.length-1;i++){ for(let j = 0;j < arr.length-i-1;j++){ if(arr[j] < arr[j+1]){ let temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr; } bubbleSort(array);}
(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个位置。
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。(3)针对所有的元素重复以上的步骤,除了最后一个。(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。快速排序排序
{ //递归思想,两边快速的排序,冒泡排序的改进 let array = [1,4,-8,-3,6,12,9,8]; let quickSort = function(arr){ if(arr.length <= 1){ return arr; } let index = Math.floor(arr.length/2); let temp = arr.splice(index,1); let left = [],right = []; for(let item of arr){ if(item < temp){ left.push(item); }else{ right.push(item); } } return quickSort(left).concat(temp,quickSort(right)); } quickSort(array);}
Math.floor(x)方法是向下取整,返回小于或等于x的最接近的整数。
splice(index,num,item)方法是向数组中添加项目,或是从数组中删除项目,并返回被删除的项目。
index是整数,被操作项目所在的位置(必须)
num是整数,要删除的项目的数量,如果为0,表示不删除(必须)item是向数组中添加的新项目,可以是多个(可选)push()方法是向数组末尾添加一个或多个新项目并返回新数组的长度concat()方法连接两个或多个数组,不会改变原有数组,返回一个新数组