面试奇遇 -- 原生JS
2024-09-08 08:16:09
最近几日去参加一些面试,多多少少有一些收获。
现将遇到的一些面试题,做一下分析和总结。
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>
最新文章
- 前端学HTTP之代理
- Tensorflow- tensor的列操作
- 标准W3C盒子模型和IE盒子模型
- codevs1080线段树练习
- org.apache.hadoop.filecache-*
- Java 字节码
- 什么时候css会见less
- 解决ubuntu 14.04在显示屏电缆被拔出的问题
- TopCoder SRM502 Div1 1000 动态规划
- HDU1069 最长上升子序列
- 【PyQt5-Qt Designer】QDoubleSpinBox-小数微调框
- Python笔记:调用函数,带扩号和和不带括号的区别
- VC++进行窗口枚举
- JS修改属性,六种数据类型
- 彻底卸载sql2008后重新安装
- 1015 德才论(sort、结构体vector)
- C语言实现链表中结构体嵌套
- Django学习笔记之Django ORM Aggregation聚合详解
- Python实践练习:口令保管箱
- DBArtist之Oracle入门第1步: 如何安装Oracle 11g
热门文章
- CodeForces 712B Memory and Trident (水题,暴力)
- display:inline-block的div 与 display:block的div之间有间隔问题(div与div之间有间隔的可能性)
- Swift3.0 控制流
- 51nod 1596 搬货物(二进制处理)
- bzoj 3109: [cqoi2013]新数独【dfs】
- NOIP2017 赛后总结
- MapperException: 无法获取实体类xxxxx对应的表名! 三种解决方法,总有一款适合你。
- 统计Apache或nginx日志里访问次数最多的前十个IP
- Nginx系列篇四:Nginx+keepalived搭建一个高可用的双机双主热备
- MYSQL性能调优与架构设计之select count(*)的思考