箭头函数中 Object.values() 的未知行为

我正在 Vannila JS 中制作随机密码生成器,我在以下代码中面临未知问题:


function generatePassword(lower, upper, number, symbol, length) {

  let generatedPassword = "";

  const typesCount = lower + upper + number + symbol;

  const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(

    (item) => Object.values(item)[0]

  );


  // Doesn't have a selected type

  if (typesCount === 0) {

    return "";

  }


  // create a loop

  for (let i = 0; i < length; i += typesCount) {

    typesArr.forEach((type) => {

      const funcName = Object.keys(type)[0];

      generatedPassword += randomFunc[funcName]();

    });

  }


  const finalPassword = generatedPassword.slice(0, length);


  return finalPassword;

}

在此代码块中,如果我将语句括在大括号 {} 中,则Object.values(item)[0]将不起作用:


const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(

    (item) => Object.values(item)[0]

  );

我不明白为什么会发生这种情况,我尝试搜索文档但无济于事,谢谢!


桃花长相依
浏览 44回答 1
1回答

慕田峪9158850

为了使 Filter 函数正确工作,它需要返回。虚假价值的真实。当你写成这样const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(&nbsp; &nbsp; (item) => Object.values(item)[0]&nbsp; );结果隐式返回,即。Object.values(item)[0] 是返回值但是如果你这样写const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(&nbsp; &nbsp; (item) => { Object.values(item)[0] }&nbsp; );&nbsp;您还没有从过滤器函数返回任何值,您需要为其添加一个 return 语句,例如const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(&nbsp; &nbsp; (item) => { return Object.values(item)[0]; });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5