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

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

基於上次的對象轉化題目,很多同窗指出對象種的數組若是長度不同,不能知足功能,因此針對這個進行優化,代碼以下所示:es6

<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)面試

這裏須要注意的是:npm

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

2.使用for in 遍歷對象會遍歷原型鏈,須要咱們判斷一下數組

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

4.開發代碼中調試時,儘可能使用console.log()來打印值,減小alert()使用優化

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

6.能夠的化,建議使用包管理,實現安裝操做,即npm發佈spa

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

<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>
相關文章
相關標籤/搜索