箭头函数中 Object.values() 的未知行为
Unknown behaviour of Object.values() in Arrow Function
我正在用 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]
);
我不明白为什么会这样,我尝试搜索文档但无济于事,谢谢!
为了使过滤器功能正常工作,需要return。虚假价值的真相。
当你这样写的时候
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
(item) => Object.values(item)[0]
);
结果是隐含的 return 即。 Object.values(item)[0] 是一个 returned 值
但是如果你这样写
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
(item) => { Object.values(item)[0] }
);
您还没有 return 从过滤器函数中编辑任何值,您需要为其添加一个 return 语句,例如
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
(item) => { return Object.values(item)[0]; }
);
我正在用 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]
);
我不明白为什么会这样,我尝试搜索文档但无济于事,谢谢!
为了使过滤器功能正常工作,需要return。虚假价值的真相。
当你这样写的时候
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
(item) => Object.values(item)[0]
);
结果是隐含的 return 即。 Object.values(item)[0] 是一个 returned 值
但是如果你这样写
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
(item) => { Object.values(item)[0] }
);
您还没有 return 从过滤器函数中编辑任何值,您需要为其添加一个 return 语句,例如
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
(item) => { return Object.values(item)[0]; }
);