【问题标题】:Unknown behaviour of Object.values() in Arrow Function箭头函数中 Object.values() 的未知行为
【发布时间】: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) =&gt; { Object.values(item)[0] } );是不行的
  • 没错,这样不行,甚至不显示任何错误
  • .filter( (item) =&gt; Object.values(item)[0] ); 在这段代码中你在尝试什么。你的意思是用.map()方法吗,因为filter是用来过滤一个数组,然后返回那个值而不是返回一个具体的值。

标签: javascript html arrow-functions


【解决方案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]; }
);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
相关资源
最近更新 更多