最近几日去参加一些面试,多多少少有一些收获。

现将遇到的一些面试题,做一下分析和总结。


1、使用原生JS,不能使用递归,查找dom中所有以“<com-”开头的自定义标签tagName。

 <!DOCTYPE html>
 <html lang="zh">

     <head>
         <meta charset="UTF-8" />
         <meta name="viewport" content="width=device-width, initial-scale=1.0" />
         <meta http-equiv="X-UA-Compatible" content="ie=edge" />
         <title>DOM获取自定义标签</title>
     </head>

     <body>
         <con-1>con11</con-1>
         <con-2>con22</con-2>
         <con-3>con33</con-3>

         <p>p11</p>
         <p>p12</p>
         <p>p13</p>
         <p>p14</p>

         <com-1>com11</com-1>
         <com-2>com12</com-2>
         <com-3>com13</com-3>

         <script type="text/javascript">
             //获取body下的所有内容,结果为字符串
             var str = document.getElementsByTagName('*')[0].innerHTML;
             console.log(str);

             //使用正则表达式,用于匹配字符串中对自定义标签
             var reg = /<com-.*>.*<\/com-.*/g;

             //利用字符串对象的match()方法并结合正则,获取字符串str中匹配的正则子串,结果为数组
             var res = str.match(reg);

             console.log(res);

             /*

             输出的结果:
             <com-1>com11</com-1>

             <com-2>com12</com-2>

             <com-3>com13</com-3>
              */
         </script>
     </body>

 </html>

2、将一个多维对象转换为二维对象:

    // 封装一个函数,使得对象obj转换后的结果为objTo的形式         

        var obj = {
                "data": {
                    "err": 1,
                    "msg": "错误"
                },
                "list": ["a", "b"],
                "request_id": "geo5-esd1-efor-veuq"
            };
            var objTo = {
                "data.err": 1,
                "list.0": "a",
                "list.1": "b",
                "reuqest_id": "geo5-esd1-efor-veuq"
            };            

js代码如下:

<script type="text/javascript">
            var obj = {
                "data": {
                    "err": 1,
                    "msg": "错误"
                },
                "list": ["a", "b"],
                "request_id": "geo5-esd1-efor-veuq"
            };
            var objTo = {
                "data.err": 1,
                "list.0": "a",
                "list.1": "b",
                "reuqest_id": "geo5-esd1-efor-veuq"
            };

            //封装函数
            function toObj(obj) {
                var newObj = {};

                for(let pro in obj) {
                    if(obj[pro].push != undefined) {
                        for(let i = 0; i < obj[pro].length; i++) {
                            newObj[pro + '.' + i] = obj[pro][i];
                        }
                    } else if(typeof obj[pro] == 'object') {
                        for(let j in obj[pro]) {
                            if(obj[pro][j] == '错误') {

                            } else {
                                newObj[pro + '.' + j] = obj[pro][j];
                            }
                        }
                    } else {
                        newObj[pro] = obj[pro];
                    }
                }
                return newObj;
            }
            console.log(toObj(obj));
        </script>

3、写一种方法:将一个维度比较高的对象转换为GET参数模式(URL地址拼接的带有参数的字符串)

该方法写的有点乱,如果有哪位大神有更优的解决方法,希望共勉!

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>对象转换为URL参数</title>
    </head>

    <body>
        <script type="text/javascript">
            var obj = {
                "openid": "123456",
                "userinfo": {
                    "name": "小明",
                    "sex": "男",
                    "tags": ["读书", "游戏", "旅行"],
                    "settings": {
                        "theme": "white",
                        "signature": "好好学习天天向上",
                        "size": 16
                    }
                },
                "status": 200
            };

            //封装函数
            function toURL(obj) {
                var str = '?';

                for(var key in obj) {
                    if(key == 'status') {

                    } else {
                        //判断数据类型
                        var type = typeof(obj[key]);
                        //基本类型数据拼接
                        if(type == 'string' || type == 'number' || type == 'boolean') {
                            str += key + '=' + encodeURIComponent(obj[key]) + '&';
                        } else if(type == 'object') {
                            //对象类型判断
                            for(var pro in obj[key]) {
                                var type2 = typeof(obj[key][pro]);
                                if(type2 == 'string' || type2 == 'number' || type2 == 'boolean') {
                                    str += key + '.' + pro + '=' + encodeURIComponent(obj[key][pro]) + '&';
                                } else if(type2 == 'object') {
                                    //判断对象数据是否为数组
                                    if(obj[key][pro] instanceof Array) {
                                        var arr = obj[key][pro];
                                        var strs = '';
                                        for(var k = 0; k < arr.length; k++) {
                                            strs += encodeURIComponent(strArr[k]);
                                        }
                                        str += strs;
                                    } else {
                                        for(var pros in obj[key]) {
                                            str += 'obj' + '.' + key + '=' + encodeURIComponent(obj[key][pro]) + '&';
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                //处理字符串末尾的&字符
                str = str.substring(0, str.length - 1);
                console.log(str);
            }
            toURL(obj);

        </script>
    </body>

</html>

最新文章

  1. 前端学HTTP之代理
  2. Tensorflow- tensor的列操作
  3. 标准W3C盒子模型和IE盒子模型
  4. codevs1080线段树练习
  5. org.apache.hadoop.filecache-*
  6. Java 字节码
  7. 什么时候css会见less
  8. 解决ubuntu 14.04在显示屏电缆被拔出的问题
  9. TopCoder SRM502 Div1 1000 动态规划
  10. HDU1069 最长上升子序列
  11. 【PyQt5-Qt Designer】QDoubleSpinBox-小数微调框
  12. Python笔记:调用函数,带扩号和和不带括号的区别
  13. VC++进行窗口枚举
  14. JS修改属性,六种数据类型
  15. 彻底卸载sql2008后重新安装
  16. 1015 德才论(sort、结构体vector)
  17. C语言实现链表中结构体嵌套
  18. Django学习笔记之Django ORM Aggregation聚合详解
  19. Python实践练习:口令保管箱
  20. DBArtist之Oracle入门第1步: 如何安装Oracle 11g

热门文章

  1. CodeForces 712B Memory and Trident (水题,暴力)
  2. display:inline-block的div 与 display:block的div之间有间隔问题(div与div之间有间隔的可能性)
  3. Swift3.0 控制流
  4. 51nod 1596 搬货物(二进制处理)
  5. bzoj 3109: [cqoi2013]新数独【dfs】
  6. NOIP2017 赛后总结
  7. MapperException: 无法获取实体类xxxxx对应的表名! 三种解决方法,总有一款适合你。
  8. 统计Apache或nginx日志里访问次数最多的前十个IP
  9. Nginx系列篇四:Nginx+keepalived搭建一个高可用的双机双主热备
  10. MYSQL性能调优与架构设计之select count(*)的思考