我无法理解如何在函数之间遍历,在它们之间传递数组,一整天的“未定义”或“这不是函数”让我抓狂。
我目前正在对 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
如果最近添加的元素与右大括号相同,我们就有一个匹配的左/右大括号。增加索引并返回分析其余的括号。
它看起来怎么样?
最佳答案
不要使用 ...
,这会将数组内容分散到函数的单独参数中,就像您编写的一样:
analyse(braceAr[0], braceAr[1], braceArr[2], /* rest of braceAr */,
testAr[0], testAr[1], testAr[2], /* rest of testAr */, i);
随便写:
analyse(braceAr,testAr,i);
您在调用 check()
时遇到同样的问题。
当check()
递归调用analyse()
时,需要返回其值;见Recursive function does not return specified value .
而且您从不在 analyse()
中使用 check()
的返回值,所以我完全不确定它的意义何在。我不确定它要做什么以及应该如何使用返回值。
validBraces("a[foo(bar).baz]");
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!
console.log(testAr);
}
function check(braceAr, testAr, i) {
if (testAr.pop() === braceAr[i]) {
i++;
return analyse(braceAr, testAr, i);
} else {
return false;
}
} //close function
function analyse(braceAr, testAr, i) {
for (l = braceAr.length; i < l; i++) {
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
关于javascript - 在 JavaScript 中的函数之间传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51900971/