JSON.parse()和JSON.stringify()对于前端工程师来说是经常使用的功能。平时我们主要用它们来处理js对象和字符串的互相解析。现在,老K来分享它们的几个惊奇用法。
一、js对象深度克隆的简洁实现
js字符串的克隆就比对象的克隆简单多了。简单的赋值操作就能完成。但是当键值是underfined,function,symbol类型时无法进行深拷贝。
let deepClone = obj => { try{ var str = JSON.stringify(obj) //序列化对象 return JSON.parse(str) //还原 }catch(err){ return err }}
二、判断一个单链表是否有环
利用 JSON.stringify() 不能序列化含有循环引用的结构解决这个算法问题。
let hasCycle = function(head) { try{ JSON.stringify(head) return false } catch(err){ return true }}
三、判断另一个树的子树
在javascript中,js对象可以代表树结构,通过把js对象序列化为字符串快速解决这个算法问题。
题目:给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } *//** * @param {TreeNode} s * @param {TreeNode} t * @return {boolean} */let isSubtree = function(s, t) { let str_s = JSON.stringify(s) let str_t = JSON.stringify(t) return (str_s.indexOf(str_t)>-1)?true:false}
本文为原创内容,若转载请注明出处,转发感激不尽。