前端面試題-數組去重和排序


首先,不好意思,我昨天偷懶了,沒有更新面試題,今日補上昨日的鍋。

基於上次的對象轉化題目,不少同學指出對象種的數組如果長度不一樣,不能滿足功能,所以針對這個進行優化,代碼如下所示:

<script>
let obj = {
        0: [44, 67],
        1: [90, 43, 56],
        2: [56, 67, 33],
        3: [80, 96, 45]
      };
      function getArr(obj) {
        if (typeof obj != "object") {
          console.warn("參數不正確");
          return;
        }

        const arr = [];
        //  遍歷對象的每一個對象
        for (var item in obj) {
          if (obj.hasOwnProperty(item) === true) {
            //  map取對象每一個total對應的值取賦值
            obj[item].map((i, index) => {
              if (!arr[index]) {
                arr[index] = [];
              }
              arr[index].push(obj[item][index]);
            });
          }
        }
        return arr;
      }
      console.log(getArr(obj));
</script>

如果你有不同的方法,或者更好的方法請來信(email:785784961@qq.com)

這里需要注意的是:

1.封裝函數的入參類型判斷,並且給出友好的提示,比如警告,或者入參示例

2.使用for in 遍歷對象會遍歷原型鏈,需要我們判斷一下

3.對於遍歷中新生成的數組要判斷是否有沒有

4.開發代碼中調試時,盡量使用console.log()來打印值,減少alert()使用

5.封裝插件要寫好readme,或者在js中寫好注釋

6.可以的化,建議使用包管理,實現安裝操作,即npm發布

進入數組去重的操作,看一下題目

<script>
// 2019-3-5 今日面試題,數組去重
      let m = [1, 2, 2],
        n = [2, 3, 3];
      // 返回 m 和n 的不重復的元素,並且按照從小到大排序
      let arr = [1,2,3]
</script>

這道題的考查點:

1.數組的合並

2.數組排序

3.數組去重

首先我們進入es6快速實現的過程,定義一個箭頭函數,使用new Set 合並數組,再用sort方法去排序,最后Array.from生成新的數組,就可以搞定了

<script>
// 2019-3-5 今日面試題,數組去重
      let m = [1, 2, 2],
        n = [2, 3, 3];
      // 返回 m 和n 的不重復的元素,並且按照從小到大排序
      
      const func = (m, n) =>
        Array.from(new Set(m.concat(n))).sort((a, b) => a - b);
      console.log(func(m, n));
</script>

第二種:常規的方法es5

<script>
      // 2019-3-5 今日面試題,數組去重
      let m = [1, 2, 2],
        n = [2, 3, 3];
      // 返回 m 和n 的不重復的元素,並且按照從小到大排序

      //  第二種方法
      function getArr(m, n) {
        for (var i = 0; i < n.length; i++) {
          if (m.indexOf(n[i]) < 0) {
            m.push(n[i]);
          }
        }
        var arr = [];
        for (var l = 0; l < m.length; l++) {
          if (arr.indexOf(m[l]) == -1) {
            arr.push(m[l]);
          }
        }
        arr = arr.sort(function(x, y) {
          return x - y;
        });
        return arr;
      }
      console.log(getArr(m, n));
    </script>

如果降序的話的第二種交互sort中y-x就好了

<script>
      // 2019-3-5 今日面試題,數組去重
      let m = [1, 2, 2],
        n = [2, 3, 3];
      // 返回 m 和n 的不重復的元素,並且按照從小到大排序

      //  第二種方法
      function getArr(m, n) {
        for (var i = 0; i < n.length; i++) {
          if (m.indexOf(n[i]) < 0) {
            m.push(n[i]);
          }
        }
        var arr = [];
        for (var l = 0; l < m.length; l++) {
          if (arr.indexOf(m[l]) == -1) {
            arr.push(m[l]);
          }
        }
        arr = arr.sort(function(x, y) {
          return  y- x;
        });
        return arr;
      }
      console.log(getArr(m, n));
    </script>

注意:

1.這里我們沒有判斷入參類型,需要調用函數時注意一下,需要是數組類型

2.日常開發中,前端和后端會約定數據類型,一般不會改變類型,所以我們可以省略類型判斷,減少數據處理的時間

3.需要考慮的點,上面數組量數據過大如何處理,如何快速排序

2019-3-6面試題

<script>
// 2019-3-6 面試題,時間格式轉化
    let data= {
        create_time:'2019-02-05T08:14:28.000Z'
    };
    // 將上面的時間進行格式化,按照入參形式返回一下3種形式
    
    // 第一種
    let time1 = '2019-02-05'

    // 第二種 
    let time2 = '2019-02-05 08:14:28'

    // 第三種

    let time3 = '2019年02月05日 上午8點14分'
    // 請在下面函數補充完整
    function getTime(time,type){

    }
</script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM