箭头函数中 Object.values() 的未知行为
Posted
技术标签:
【中文标题】箭头函数中 Object.values() 的未知行为【英文标题】:Unknown behaviour of Object.values() in Arrow Function 【发布时间】:2020-07-24 20:37:09 【问题描述】:我正在 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]
);
我不明白为什么会这样,我尝试搜索文档但无济于事,谢谢!
【问题讨论】:
如果没有大括号,你现在遇到什么错误? 我检查了控制台,但是当我将它括在花括号中时,我似乎没有给出错误,但代码也不起作用......但是如果大括号被删除,代码就可以工作很好 你的意思是写const typesArr = [ lower , upper , number , symbol ].filter( (item) => Object.values(item)[0] );
是不行的
没错,这样不行,甚至不显示任何错误
.filter( (item) => Object.values(item)[0] );
在这段代码中你在尝试什么。你的意思是用.map()
方法吗,因为filter是用来过滤一个数组,然后返回那个值而不是返回一个具体的值。
【参考方案1】:
为了使过滤器功能正常工作,它需要返回。一个虚假价值的真理。
当你这样写时
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) => return Object.values(item)[0];
);
【讨论】:
如果你能回答这个***.com/questions/61204297/…请以上是关于箭头函数中 Object.values() 的未知行为的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Node.js 的服务器端使用 Object.values()
时间:2019-04-01 标签:c#com object can't get ref object values
Object.entries() 和 Object.values() 在 WebStorm/PhpStorm 中没有被键入为数组
android.animation - ValueAnimator-ofObject(TypeEvaluator evaluator, Object... values)