今天无意中发现了这么一道有意思的题目:
let str = "[ {a:1 , d:3} , {b:2} , {c:3} ]"
将其解析成 JavaScript 的数据结构。详细原题可以看这里 js中,如何将一个字符串类型的数组转换为真正的数组?
这题对我来讲非常熟悉,属于典型的 stack
+ queue
题型。作为一道考察 CS 基础的 medium 的经典编程面试题,是一道常考题,我之前经常面试和被面试到。下面我来详细说一说自己的思路。
▍准备知识
上路之前请先参考 LeetCode 20. Valid Parentheses 先了解一下基础。
▍详细解题思路
为了简化模型,假设输入满足以下条件:
1 输入是一个合法的字符串,即各种嵌套括号等都是合法的(legit JavaScript data structure)。
2 根节点只包含一个数组或者对象。
3 仅包含数组[]
和对象{}
作为复杂嵌套对象。
4 除数组、对象之外,输入字符串仅包含冒号:
和逗号,
作为元数据,其他都是需要处理的数据。
5 不包含任何引号或者双引号。
6 忽略空白字符(单个或者多空格等)。
有了输入和要求,那么怎么撸这题呢?
当然是按照 TDD(test driven development)来搞。
首先列出所有种类的测试用例:
// level 1
const strSimpleArray = "[ a, 33 ]";
const strSimpleObject = "{ a: 33 }";
// level 2
const strArrayObject = "[ a, { b: 2} , 33 ]";
const strObjectArray = "{ a:1, b:[ 2 ] , c:33 }";
// level 3
c