Javascript Arrow函数中Object.values()的未知行为

Javascript Arrow函数中Object.values()的未知行为,javascript,html,arrow-functions,Javascript,Html,Arrow Functions,我正在用Vannila JS制作一个随机密码生成器,我在下面的代码中遇到了一个未知问题: 函数生成器密码(下、上、数字、符号、长度){ 让generatedPassword=“”; const typescont=下限+上限+数字+符号; 常量typesArr=[{lower},{upper},{number},{symbol}]。筛选器( (项)=>对象值(项)[0] ); //没有选定的类型 如果(类型查询===0){ 返回“”; } //创建一个循环 for(设i=0;i{ const f

我正在用Vannila JS制作一个随机密码生成器,我在下面的代码中遇到了一个未知问题:

函数生成器密码(下、上、数字、符号、长度){
让generatedPassword=“”;
const typescont=下限+上限+数字+符号;
常量typesArr=[{lower},{upper},{number},{symbol}]。筛选器(
(项)=>对象值(项)[0]
);
//没有选定的类型
如果(类型查询===0){
返回“”;
}
//创建一个循环
for(设i=0;i{
const funcName=Object.keys(类型)[0];
generatedPassword+=randomFunc[funcName]();
});
}
const finalPassword=generatedPassword.slice(0,长度);
返回最终密码;
}
在这段代码中,如果我将语句括在大括号{}中,则对象.values(item)[0]不起作用:

const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
    (item) => Object.values(item)[0]
  );

我不明白为什么会发生这种情况,我试着搜索文档,但没有用,谢谢

为了使过滤器功能正常工作,它需要返回。虚假价值的真理

当你这样写的时候

const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
    (item) => Object.values(item)[0]
  );
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]
  );
const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
    (item) => { Object.values(item)[0] }
  ); 
您还没有从filter函数返回任何值,您需要为它添加一个return语句,如

const typesArr = [{ lower }, { upper }, { number }, { symbol }].filter(
    (item) => { return Object.values(item)[0]; }
);

如果没有大括号,你现在会出现什么错误?我检查了控制台,但当我将它括在大括号中时,似乎没有给出错误,但代码也不起作用。。。但是如果删除了大括号,代码就可以正常工作。你是说如果你写
consttypesarr=[{lower}、{upper}、{number}、{symbol}],它就不工作了吗确切地说,它不以这种方式工作&甚至不显示任何错误
.filter((项)=>Object.values(项)[0])你在这段代码中尝试了什么。您是否打算使用
.map()
方法,因为筛选器用于筛选数组,然后返回该值而不是返回特定值。如果您可以回答此问题,请