常用数组方法看过的有福了
找元素:arr。indexOf()找到返回索引,找不到返回1arr。includes(item,2)从索引为2开始找,返回true或者false可以用于去重增删改查arr。push()末尾增加arr。unshift()开头增加arr。pop()末尾删除arr。shift()开头删除删除新增
arr。splice(n,m,num)从下标为n的开始(包括n)删除m个,把num增加到删除的n下标的前面(非常强大)填充:
value:填充值。
start:填充起始位置,可以省略。
end:填充结束位置,可以省略,实际结束位置是end1。arr。fill(value,start,end)constarr3〔1,2,3,4,5,6,7,8,9,10,11〕arr3。fill(7,2,5)console。log(s,arr3)1,2,7,7,7,6,7,8,9,10,11排序arr。sort(function(a,b){returnab})arr。sort(function(a,b){returna。ageb。age})arr。sort(function(){returnMath。random()0。5})随机排列arr。reverse()反向排序交换两个数leta5;letb8;〔a,b〕〔b,a〕
数据拼接arr。concat(arr1)不改变原数组〔1,2,。。。rest〕截取:arr。slice(n,m)截取,包括n但不包括marr。slice(1,1)允许负数不改变原数组,1为倒数第一个,2为倒数第二个字符串和数组之间转换arr。join()将数组装换成字符串,并将里的分隔每一项str。split()将字符串分割为数组arr。toString()装换为字符串arr。toLocaleString()装换为本地数组
总结:num。toFixed(2)保留两位小数交换两个数的值〔x,y〕〔y,x〕filter()、concat()和slice()。它们不会变更原始数组,而总是返回一个新数组返回值:增加返回新增后的长度,删除返回删除的项,splice返回删除的数组,slice返回截取的数组
数组降维拍平arr。flat()数组降维默认传1,将一个维度,传入Infinity,表示降维一维数组,不改变原数组functionflattening(arr,num){if(!Array。isArray(arr))returnarrreturnarr。flat(num);}flatMapflatMap()允许在对数组进行降维之前,先进行一轮映射,用法和map()一样。然后再将映射的结果降低一个维度。可以说arr。flatMap(fn)等效于arr。map(fn)。flat(1)。但是根据MDN的说法,flatMap()在效率上略胜一筹,谁知道呢。flatMap()也可以等效为reduce()和concat()的组合,下面这个案例来自MDN,但是这不是一个map就能搞定的事么?vararr1〔1,2,3,4〕;arr1。flatMap(x〔x2〕);等价于arr1。reduce((acc,x)acc。concat(〔x2〕),〔〕);〔2,4,6,8〕arr。tostring()。split(,’)利用reduce进行迭代,核心的思想是递归实现functionflattening(arr,num){if(!Array。isArray(arr))returnarrreturnarr。reduce((a,b)a。concat(Array。isArray(b)?flattening(b):b),〔〕)}
构造数组applyArray。apply(null,{length:10})Array。apply(null,〔1,2,3,4〕)值为undefinedmap(()100)填充
2。Array()
Array(10)empty10站位不能被map填充可以用fillArray(10)。fill({})
3。Array。fromArray。from({length:100},(v,k)k);
推荐这个:生成数组,第二个参数函数进行遍历
伪数组数组之间的转化Array。prototype。slice。call(arguments);〔〕。slice。call(arguments,0)Array。from(arguments)
判断数组
5。判断数组的方法:
使用instaceof和construcor,被判断的array必须是在当前页面声明的!ainstanceofArraya。constructorArraya的构造函数是ArrayArray。isArray(a)推荐
清空数组arr。length0arr。splice(0)arr〔〕
过滤数组中的空值arr。filter(Boolean)删除arr里为false的项null,undefined,false,0,,NaN,不改变原数组
排序去重冒泡排序1。冒泡排序,一次选一个最大的放在后面,arr。length次,每次少比较一个functionmpSortFun(arr){for(vari0;iarr。length;i){一遍就选一个最大的放在最后,要arr。length遍才能把这个数组排序好。for(varj0;jarr。length1i;j){小循环,和其他元素进行比较,把最大的放在最后面,其余的我不管。交换位置arr〔j〕arr〔j1〕vartemp;if(arr〔j〕arr〔j1〕){temparr〔j〕;arr〔j〕arr〔j1〕;arr〔j1〕temp;}}}returnarr;}
快速排序2。快速排序一次一轮两两交换functionquickSortFun(arr){for(vari0;iarr。length;i){数组中的每一个数varminarr〔i〕;假设最小的值varminIndexi;最小值所在的索引for(varji1;jarr。length;j){当前项依次于其他项进行比较if(minarr〔j〕){如果不是最小的minarr〔j〕;把更小的值和索引交给假定的最小的值和索引minIndexj;}}通过中间变量互换值arr〔minIndex〕arr〔i〕;循环结束以后,把最小的值和假设最小的值交换arr〔i〕min;}returnarr;}
复合排序vararr〔sp12,su18,au13,wi14〕for(vari0;iarr。length;i){for(varj0;jarr。lengthi1;j){if(parseInt(arr〔j〕。substr(2,2))parseInt(arr〔j1〕。substr(2,2))){vartemparr〔j〕;arr〔j〕arr〔j1〕;arr〔j1〕temp}}}
原生排序arr。sort(function(a,b){returna。ageb。age}})
filter去重letnewarrarr。filter((item,index)!arr。includes(item,index1))array。filter((item,idx,arr)arr。indexOf(item)idx);set去重Array。from(newSet(arr))constnonUnique〔。。。newSet(array)〕;
相邻去重varstrabccdedeefghiiiabbbbnnnsssfgg;数组functionQC(data){letarrArray。isArray(data)?arrdata:arrdata。split()for(vari0;iarr。length;i){if(arr〔i〕arr〔i1〕){arr。splice(i1,1)ii1}}returnarr。join()}onsole。log(QC(str))
单行的回文数检查functioncheckPalindrome(str){returnstrstr。split()。reverse()。join();}checkPalindrome(naman);输出:true