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

标签 javascript html arrow-functions

我正在 Vannila JS 中制作随 secret 码生成器,我在以下代码中遇到未知问题:

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]
  );

我不明白为什么会发生这种情况,我尝试搜索文档但无济于事,谢谢!

最佳答案

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

当你这样写时

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]; }
);

关于javascript - 箭头函数中 Object.values() 的未知行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61168357/

相关文章:

javascript - 如何在另一个函数中停止一个函数

javascript - 多个 JavaScript 代码的执行顺序

javascript - 如何在多列中本地添加数据?

html - <head> 中的 <noscript>

JavaScript 箭头函数

syntax - 如何在 CoffeeScript fat-arrow 回调中引用实际的 'this' ?

javascript - 如何在没有任何元素 id 的情况下检索表中的文本内容

html - 将 Ionic 3 列表中的一项显示到另一页

javascript - 查找和箭头符号在 IE 中不起作用

javascript - NextJS 动态列表在删除/更新时不更新