【发布时间】:2018-08-17 18:19:38
【问题描述】:
我无法理解如何在函数之间遍历,在它们之间传递数组,一整天的“未定义”或“这不是函数”让我大吃一惊。
我目前正在对 codewars 进行挑战,这个任务看起来很简单,取一个带有左大括号和右大括号的字符串,并检查它们是否以正确的顺序打开/关闭。然而,由于某种原因,console.log 在这个挑战中没有返回任何东西,所以我不得不盲目地去做。
这是第一个函数,我设置了所有的变量和数组,并将其传递给下一个函数。
function validBraces(braces) {
var braceAr = [];
braceAr = braces.split('');
var testAr = []; // array to be used for testing the order
var i = 0; // iterator for the loop in analyse() function
analyse(...braceAr,...testAr,i); //send the arrays to the function!
}
在上面函数的最后一行,我试图将数组传递给下一个函数,我不想在下一个函数中创建它们,因为有第三个函数进行检查,发送它再次回到第二个(分析)。我在这个“版本”中使用了扩展运算符,但是,我已经用尽了我的理解和资源,所以我伸出手来获得更好的理解。有人可以解释我如何将这些数组传递给函数。我试图从我找到的解释中应用一些东西,但我觉得我可能遗漏了一些限制我的基本内容。
其余代码如下,可能不相关,但以防万一。我很想解决这个问题,所以尽量不要放弃太多;)
function analyse(braceAr,testAr,i) {
for(l = braceAr.length; i<l ;) {
switch(braceAr[i]) {
case '[':
testAr.push("]");
break;
case '{':
testAr.push("}");
break;
case '(':
testAr.push(")");
break;
case ']':
check(...braceAr,...testAr,i);
break;
case '}':
check(...braceAr,...testAr,i);
break;
case ')':
check(...braceAr,...testAr,i);
break;
} //close switch
} //close loop
return (testAr.length = 0 ? true : false);
} //close function
如您所见,我打算在数组中的每个元素之间进行切换,如果是左大括号,我会将对应的右大括号推入一个数组中,以便在第三个函数check()中进行比较
function check(braceAr,testAr,i) {
if(testAr.pop() === braceAr[i])
{
i++;
analyse(...braceAr,...testAr,i);
} else { return false; }
} //close function
如果最近添加的元素与右大括号相同,则我们有一个匹配的左/右大括号。增加索引并返回分析其余的大括号。
它看起来怎么样?
【问题讨论】:
-
这可能对你有用,假设它与你的 JS 函数调用的顺序很接近 - stackoverflow.com/questions/7609276/…
-
IIRC,正确排序函数只是一个好习惯,因为 lint 会引发错误。我一直在玩订单无济于事。我会整理一下,谢谢
-
braceAr和testAr已经是数组。将...作为参数传递时,无需使用扩展运算符。 -
@JayJenkins 我的评论是在黑暗中拍摄的,无论如何我都不是 JS 专家。看起来一些合适的专家已经加入了;)
标签: javascript arrays