为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

桃花长相依 2023-12-11 10:22:53
我正在 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]  );我不明白为什么会发生这种情况,我尝试搜索文档但无济于事,谢谢!
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

为了使 Filter 函数正确工作,它需要返回。虚假价值的真实。


当你写成这样


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

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

  );

结果隐式返回,即。Object.values(item)[0] 是返回值


但是如果你这样写


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

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

  ); 

您还没有从过滤器函数返回任何值,您需要为其添加一个 return 语句,例如


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

    (item) => { return Object.values(item)[0]; }

);


查看完整回答
反对 回复 2023-12-11
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信