zoukankan      html  css  js  c++  java
  • 自定义标签&JSON数据处理

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

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


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

     1 <!DOCTYPE html>
     2 <html lang="zh">
     3 
     4     <head>
     5         <meta charset="UTF-8" />
     6         <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     7         <meta http-equiv="X-UA-Compatible" content="ie=edge" />
     8         <title>DOM获取自定义标签</title>
     9     </head>
    10 
    11     <body>
    12         <con-1>con11</con-1>
    13         <con-2>con22</con-2>
    14         <con-3>con33</con-3>
    15 
    16         <p>p11</p>
    17         <p>p12</p>
    18         <p>p13</p>
    19         <p>p14</p>
    20 
    21         <com-1>com11</com-1>
    22         <com-2>com12</com-2>
    23         <com-3>com13</com-3>
    24 
    25         <script type="text/javascript">
    26             //获取body下的所有内容,结果为字符串
    27             var str = document.getElementsByTagName('*')[0].innerHTML;
    28             console.log(str);
    29 
    30             //使用正则表达式,用于匹配字符串中对自定义标签
    31             var reg = /<com-.*>.*</com-.*/g;
    32 
    33             //利用字符串对象的match()方法并结合正则,获取字符串str中匹配的正则子串,结果为数组
    34             var res = str.match(reg);
    35 
    36             console.log(res);
    37 
    38             /*
    39 
    40             输出的结果:
    41             <com-1>com11</com-1>
    42 
    43             <com-2>com12</com-2>
    44 
    45             <com-3>com13</com-3>
    46              */
    47         </script>
    48     </body>
    49 
    50 </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>
  • 相关阅读:
    android提供ToolBar实现划动菜单的陷阱
    style="display"之后不能获取offsetHeight或clientWidth这类测量的值
    onmouseenter与onmouseover
    使用Dom的Range对象处理chrome和IE文本光标位置
    js严格模式“use strict”
    正则表达式lastIndex属性浅析
    IE中的fireEvent和webkit中的dispatchEvent
    readonly=“readonly”与readonly=“true”
    【杂文】
    【洛谷p1015】【一本通p1309】回文数(noip1999)
  • 原文地址:https://www.cnblogs.com/zxk5211/p/web_8.html
Copyright © 2011-2022 走看看