利用Javascript中的ECMAScript 6功能;何时使用粗箭头功能等?

BugBuddy

我正在独自完成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循环,但我想不出一种更好的方法来实现我的功能。而且我看不到使用粗箭头功能如何改善代码。因此,我期待提出建议和反馈。

杰克逊·伦哈特(Jackson Lenhart)

我认为您的代码很好。它简单明了,易于理解。但是,绝对不是当前的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章