我正在 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]; }
);
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消