JavaScript面试技巧之数组的一些不低的操作

  


  

  

本文主要从应用来讲数组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])//10

JavaScript面试技巧之数组的一些不低的操作