本文主要从应用来讲数组api的一些骚操作,
如一行代码扁平化n维数组,数组去重,求数组最大值,数组求和,排的序,对象和数组的转化等;
上面这些应用场景你可以用一行代码实现?
1。终极篇
[1,2,3]].flat (2)//(1、2、3) [1,2,3,4,5]].flat (3)//[1、2、3、4、5) [1,2,3,4,5]]].toString ()//?、2、3、4、5” [1 (2、3、4、5 […]].flat (∞)//[1、2、3、4……n]
<代码> Array.flat (n) 代码>是ES10扁平数组的api, n表示维度,n值为无穷大时维度为无限大
<强> 2。开始篇强>
函数平(arr) { 而(arr.some(项=祝辞Array.isArray(项目))){ arr=[] .concat arr (…); } 返回arr; } 平([1,2,3]])//(1、2、3) 平([1,2,3,(4、5)))//[1、2、3、4、5)
实质是利用递归和数组合并方法concat实现扁平
<强> 1。终极篇强>
Array.from(新组([1、2、3、3、4、4]))//(1、2、3、4) […新的([1、2、3、3、4、4])]//(1、2、3、4)
设置是ES6新出来的一种一种定义不重复数组的数据类型
<代码> Array.from> 代码是将类数组转化为数组
…是扩展运算符,将设置里面的值转化为字符串
<强> 2。开始篇强>
Array.prototype。不同=function () { var arr=, 结果=[], 我, j, len=arr.length; (我=0;我& lt;兰;我+ +){ (j=i + 1;j & lt;兰;j + +) { 如果(arr[我]===arr [j]) { j=+ + i; } } result.push (arr[我]); } 返回结果; } (1、2、3、3、4、4].distinct ();//(1、2、3、4)
取新数组存值,循环两个数组值相比较
<强> 1。终极篇强>
(1、2、3、4)。排序((a, b)=比;a - b);//(1、2、3、4),默认是升序 (1、2、3、4)。排序((a, b)=比;b - a);//[4、3、2、1]降序
排序是js内置的排序方法,参数为一个函数
<强> 2。开始篇强>
冒泡排序:
Array.prototype。bubleSort=function () { 让arr=, len=arr.length; (让外=兰;外祝辞=2;外——){ (让内心=0;内& lt;=外- 1;内部+ +){ 如果(arr(内部)的在加勒比海盗(内部+ 1)){//升序 (arr(内部),arr[内+ 1]]=[arr(内部+ 1),arr[内部]]; 控制台。日志([arr(内部),arr[内+ 1]]); } } } 返回arr; } (1、2、3、4).bubleSort ()//(1、2、3、4)
选择排序
Array.prototype。selectSort=function () { 让arr=, len=arr.length; (让我=0,len=arr.length;我& lt;兰;我+ +){ (让j=我,len=arr.length;j & lt;兰;j + +) { 如果(arr[我]比;加勒比海盗[j]) { (arr[我],arr [j]]=[arr [j], arr[我]]; } } } 返回arr; } (1、2、3、4).selectSort ()//(1、2、3、4)
<强> 1。终极篇强>
Math.max (…[1、2、3、4])//4 Math.max.apply (, (1、2、3、4))//4 (1、2、3、4)。减少((上一页,坏蛋,curIndex arr)=比;{ 返回Math.max(上一页,cur); },0)//4
<代码> Math.max() 代码>是数学对象内置的方法,参数是字符串;
减少是ES5的数组api,参数有函数和默认初始值;
函数有四个参数,pre(上一次的返回值),坏蛋(当前值),curIndex(当前值索引),arr(当前数组)
<强> 2。开始篇强>
先排序再取值
<强> 1。终极篇强>
(1、2、3、4).arr。减少(函数(上一页,cur) { 返回上一页+坏蛋; },0)//10
<强> 2。开始篇强>
函数之和(arr) { var len=arr.length; 如果(len==0) { 返回0; }else if (len==1) { 返回arr [0]; 其他}{ 返回arr[0] +总和(arr.slice (1)); } } sum ([1、2、3、4])//10JavaScript面试技巧之数组的一些不低的操作