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

问题描述 投票:0回答:1

我正在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]
  );

我不明白为什么会这样,我尝试搜索文档但无济于事,谢谢!

javascript html arrow-functions
1个回答
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) => { return Object.values(item)[0] } );  
© www.soinside.com 2019 - 2024. All rights reserved.