• 前端面试题-数组去重和排序


    首先,不好意思,我昨天偷懒了,没有更新面试题,今日补上昨日的锅。

    基于上次的对象转化题目,不少同学指出对象种的数组如果长度不一样,不能满足功能,所以针对这个进行优化,代码如下所示:

    <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>
  • 相关阅读:
    SQL常用单词
    Appium+python自动化获取toast消息的方法
    转:TCP/IP协议(一)网络基础知识
    【转】使用python实现appium的屏幕滑动
    JMETER java.net.SocketTimeoutException: Read timed out
    JMETER java.net.SocketException: Connection reset 报错解决方案
    Jmeter Distributed (Remote) Testing: Master Slave Configuration
    转:Jmeter分布式测试
    转:centos查看实时网络带宽占用情况方法
    Python类继承(转发)
  • 原文地址:https://www.cnblogs.com/starryqian/p/10488616.html
Copyright © 2020-2023  润新知