【发布时间】:2020-11-20 15:21:22
【问题描述】:
我一直在做一些作业来复制一个类似 json 解析的函数,目前我写了一个如下的函数:
var arr = '[a, [a, bjng], n]'
var intoArray = function(string) {
if (string.length <= 2) {
return [];
}
var resultsArr = [];
var toJoin = [];
var simpArr = string.slice(1, string.length - 1).replace(/['"]+/g, '').replace(/[' '']+/g, '').split(',');
for (var a = 0; a < simpArr.length; a++) {
if (simpArr[a].includes('[')) {
while (!simpArr[a].includes(']')) {
toJoin.push(simpArr[a]);
a++;
}
}
if (simpArr[a].includes(']')) {
toJoin.push(simpArr[a]);
}
}
var joined = toJoin.join(',')
var joint = joined.slice(1, joined.length - 1).replace(/['"]+/g, '').replace(/[' '']+/g, '').split(',')
for (var a = 0; a < simpArr.length; a++) {
if (!toJoin.includes(simpArr[a])) {
resultsArr.push(simpArr[a])
}
if (simpArr[a] === toJoin[0]) {
resultsArr[a] = joint
}
}
return resultsArr
};
console.log(intoArray(arr))
运行时,它将这个字符串'[a, [a, bjng], n]'(这只是一个大字符串)转换为[ 'a', [ 'a', 'bjng' ], 'n' ](这是一个包含多个字符串和另一个数组的数组,这是所需的行为)。但是,当示例字符串内部有多个数组时,例如'[a, [a, bjng],[c] , n]',结果是它被视为一个更大的数组,例如[ 'a', [ 'a', 'bjng]', '[c' ], 'n' ](请注意,它不是创建两个数组,而是认为'[a' trough 'c]' 是一个大数组数组),我仍在学习,因此非常感谢一些见解,或者如果有人知道我如何调整它以处理多个数组!还是更好的实现方式?
【问题讨论】:
-
你需要研究“递归下降解析”。
-
这不是一项简单的任务,对于初学者来说似乎也不适合。
-
这并不复杂...
标签: javascript arrays string