递归手撕,JSON 字符串化和解析,加权树结构的字符串解析对象,解析并返回DOM 树结构(DOMParser),解析带有层级的文本

ops/2024/9/23 5:56:49/

目录

1 JSON 字符串化和解析

2 加权树结构的字符串解析对象

3. 解析并返回DOM 树结构

4. 解析带有层级的文本


1 JSON 字符串化和解析

javascript">//  <!-- 实现一个函数,能够将自定义格式的字符串转换为 JSON 对象。
//      例如,给定字符串 'name: "Alice", age: 30',输出 { name: "Alice", age: 30 }。 -->
function digui(str){//首先 截取,的前后 然后截取:的前后let obj={}//str1='' x.slice()let arr=str.split(',')//['name:'alice],['age':'30']//考虑到alice外的引号和:后的空白没arr.map((item,index)=>{let [apple,pine]=item.split(': ').map((i)=>i.trim())pine=JSON.parse(pine)obj[apple]=pine})return obj}
let str='name: "Alice", age: 30'
console.log(digui(str))

2 加权树结构的字符串解析对象

给定一个加权树结构的字符串,例如 '(A:3,(B:2,C:1))',解析为一个对象 { A: 3, B: 2, C: 1 }。

javascript">//遇到左括号 递归 处理去掉逗号后 去掉冒号 第function digui(str){
//干脆去除所有括号 
let str2=''
for(let i=0;i<str.length;i++){if(str[i]!='(' && str[i]!=')')str2+=str[i]}
let obj={}
let lines=str2.split(',').map(item => item.trim())
//[a:3],[b,3]
lines.forEach((item)=>{let [apple,pine]=item.split(':').map(item => item.trim())obj[apple]=pine})
return obj}let str='(A:3,(B:2,C:1))'console.log(digui(str))

3. 解析并返回DOM 树结构

实现一个函数,能够解析简单的 HTML 字符串并返回 DOM 树结构。

// 例如,给定字符串 "<div><span>Hello</span><p>World</p></div>"

javascript">function apple(str){
let parser = new DOMParser()
let tryparser = parser.parseFromString(str,'text/html').body.firstChild
return tryparser}let str= "<div><span>Hello</span><p>World</p></div>";console.log(apple(str)); 

解析后返回的文档中包含一个完整的 HTML 文档结构(包含 <html><head> 和 <body> 标签),.body 选择其中的 <body> 元素。firstChild 选择 <body> 中的第一个子节点div。

text/html' 告诉浏览器和 JavaScript 解释器要将字符串按照 HTML 格式解析。

4. 解析带有层级的文本

编写一个函数将其解析为树形结构。

javascript">function treee(str){let root={value:'root',children:[]}let st=[root]let lines=str.split('\n')lines.forEach(line=>{
let level=line.search(/\S/)
let node={value:line.trim(),children:[]}
while(st.length>level+1){st.pop()
}
st[st.length-1].children.push(node)
st.push(node)})return root }const text = 'A\n  B\n    C\n  D';console.log(JSON.stringify(treee(text), null, 2));


http://www.ppmy.cn/ops/114608.html

相关文章

MySQL面试题——第一篇

1. 一张自增表里面总共有7条数据&#xff0c;删除了最后2条数据&#xff0c;重启数据库后又插入了一条数据&#xff0c;此时ID是几 表类型如果是MyISAM&#xff0c;那么id就是8 如果是InnoDB&#xff0c;那就是6 InnoDB表只会把自增主键的最大id记录在内存中&#xff0c;所以重…

十八,Spring Boot 整合 MyBatis-Plus 的详细配置

十八&#xff0c;Spring Boot 整合 MyBatis-Plus 的详细配置 文章目录 十八&#xff0c;Spring Boot 整合 MyBatis-Plus 的详细配置1. MyBatis-Plus 的基本介绍2. Spring Boot 整合 MyBatis Plus 的详细配置3. Spring Boot 整合 MyBatis plus 注意事项和细节4. MyBatisx 插件的…

Python Pandas数据清洗之缺失数据处理

大家好&#xff0c;在数据分析和处理过程中&#xff0c;缺失数据是常见且不可避免的现象。无论是在数据收集、传输或存储的过程中&#xff0c;数据集可能会出现部分丢失。缺失数据的存在不仅会影响数据的完整性&#xff0c;还可能对后续的数据分析和建模造成不利影响。为了保证…

JS实现数组去重常见方法

写在前面 今天在实现数组去重时&#xff0c;使用了多种方法实现。在此总结一下数组去重常见方法。 01_多重for循环去重 let arr [1, 2, 2, 3, 3, 1, 2] // 多层for循环去重 for (let i 0;i < arr.length;i) {for (let j i 1;j < arr.length;j) {if (arr[i] …

给子组件传递dom元素引用实例方案

在实际开发中有一个比较常见的场景是&#xff0c;父组件写了一个el-form组件。然后里面内容很多&#xff0c;所以拆成了子组件。那么子组件中就有调用父组件的form实例方法的需求。到所以这就涉及一个问题&#xff0c;怎么把父组件的form实例传递给子应用。 这里传递后直接调用…

【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤

问题描述 Azure Redis在使用的过程中&#xff0c;多次无规律的出现超时问题。抓取到客户端的异常错误后&#xff0c;想进一步的分析是何原因导致了如下异常呢&#xff1f; Timeout awaiting response (outbound0KiB, inbound0KiB, 5984ms elapsed, timeout is 5000ms), command…

pg入门15—pg中fts configurations是什么

在 PostgreSQL 中&#xff0c;FTS configurations&#xff08;全文搜索配置&#xff09;是用于定义文本分析和搜索行为的设置。这些配置决定了如何处理和解析输入文本&#xff0c;以便进行高效的全文搜索。 主要组成部分 词汇表&#xff1a; 确定哪些词会被视为搜索词&#xf…

【mac】MacOS无法打开XXX文件,因为无法验证开发者的问题解决

博主介绍&#xff1a; 大家好&#xff0c;我是想成为Super的Yuperman&#xff0c;互联网宇宙厂经验&#xff0c;17年医疗健康行业的码拉松奔跑者&#xff0c;曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 技术范围&#xff1a; 目前专注java体系&#xff0c;以及…