我正在独自完成Udemy课程ES6 Javascript: The Complete Developer's Guide Stephen Grider
。本课程是我第一次接触javascript。(对我来说)它包含一个有趣的练习,用于检测平衡括号。我用期望的功能编写了一个函数,但没有使用粗箭头函数。我可能没有使用本可以使用的其他ECMAScript 6功能。我想要任何有关改进我的代码的建议。
function balancedParens(inputString){
const errMsg1 = 'ERROR: expression will NEVER be balanced';
const errMsg2 = 'ERROR: unbalanced!';
const successMsg = 'parens are balanced.';
const chars = inputString.split("");
let count = 0;
for ( let i = 0; i < chars.length; ++i ) {
if ( count < 0 ) { console.log(errMsg1); return false; }
if ( chars[i] === "(" ) { ++count; }
else if ( chars[i] === ")" ) { --count; }
}
if ( count < 0 ) { console.log(errMsg1); return false; }
else if ( count == 0 ) { console.log(successMsg); return true; }
else { console.log(errMsg2); return false; }
}
balancedParens("()()(i)"); //correctly returns true
balancedParens("()()())"); //correctly returns false
我的函数检测到永远无法平衡的Parens,并尽早解决,这是课程中的示例所没有做到的。在重构和改进代码时,我想保留此功能。
本课程强烈建议您不要使用for循环,但我想不出一种更好的方法来实现我的功能。而且我看不到使用粗箭头功能如何改善代码。因此,我期待提出建议和反馈。
我认为您的代码很好。它简单明了,易于理解。但是,绝对不是当前的javascript时髦会认为很酷的东西。
不幸的是,没有使用诸如for循环的传统循环结构,当parens永远无法平衡时,您无法提早退出。因此,说实话,您的功能可能比他们想要的功能更有效。但是一般来说,JavaScript潮人并不真正在乎代码效率。
这可能是他们正在寻找的更多东西:
const balancedParens = inputString =>
// We don't need curly brackets here because we're doing everything
// on one "line" and just returning
inputString.split('')
// Reduce is the substitute for your for loop here.
// It iterates over each character and stores the return value in "sum"
// on each iteration
.reduce((sum, char) => {
if (char === '(') return sum + 1;
else if (char === ')') return sum - 1;
else return sum;
// This comparison makes the entire function return true if
// our reduce resulted in zero, otherwise false
}, 0) === 0;
const logResult = result =>
result ? console.log('parens are balanced.')
: console.log('ERROR: unbalanced!');
logResult(balancedParens('()()(i)'));
logResult(balancedParens('()()())'));
如果您不熟悉数组上的reduce函数,请在此处查看:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
它是一个高阶函数(意味着将一个函数作为其参数之一的函数)。这是粗箭头的常见用例,只是因为符号最终变得更简洁。
注意:对于“强烈反对”循环的任何课程,我可能会持怀疑态度。但是也许他们只是想让您使用新的JS功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句