【发布时间】:2017-03-21 13:04:03
【问题描述】:
我正在尝试编写一个函数,将括号中包含的单词提取到它们自己的数组中,递归地解释嵌套括号。
所以对于“((a b) ugh (one two)) pi”,我希望将其转换为以下结构:
[
[
[
"a",
"b"
],
"ugh",
[
"1",
"2"
],
]
"pi"
]
为此,我编写了以下函数:
function shitshow(hell) {
var ssparts = [];
var done = false;
for (i in hell) {
let part = hell[i];
switch(part) {
case "(":
ssparts.push(shitshow(hell.slice(i+1)));
break;
case ")":
done = true;
break;
default:
ssparts.push(part);
}
if (done) break;
}
return ssparts;
}
console.log(shitshow("((developer or engineer) or (nurse or doctor)) and manager"));
它不起作用。它为我返回的数组(我正在节点 4 上测试它):
[
"",
[
"doctor"
],
[],
"developer",
"or",
"engineer"
]
已经为此苦苦挣扎了一段时间。有什么想法吗?
编辑:正如@Oriol 在这篇文章的 cmets 中提到的,我发布的代码不会产生我发布的输出。这是因为我忘记提及/包括我在哪里将初始字符串 RegEx 转换为单词和非字母数字符号的数组。为此事道歉。因为@Oriol 已经发布了一个可行的解决方案,所以我将包含此通知而不是更新我的代码,以便他发布的解决方案可以继续存在。
【问题讨论】:
-
喜欢那些函数名
-
您的代码无法生成该输出。您正在将单个字符推送到数组中。
-
@Oriol 好点,我忘了补充一点,我使用 RegEx 将字符串拆分为单词数组,没有字母符号。只要我再次使用笔记本电脑,就会更新。
-
@Oriol 或者我想既然您已经发布了解决方案,我将更新我的问题以反映字符串输入,以便您的答案可以成立。顺便说一句,谢谢您的回复。
标签: javascript arrays node.js recursion