【问题标题】:function returns a whole array instead of value函数返回整个数组而不是值
【发布时间】:2021-10-17 15:48:17
【问题描述】:

我正在编写一个函数,它接受一个名称数组并返回少于 10 个字符的名称。但是,我下面的代码返回了整个数组,我认为这是因为数组的长度小于 10。

我可以做些什么来检查元素而不是整个数组

const usernames = ["mark", "staceysmom197800000"];
function validUserNames(usernames) {
  return usernames.filter((m) => usernames.length < 10).map((m) => usernames);
}

我想要的输出是“mark”。

【问题讨论】:

  • 如果不过滤每个项目,过滤器的目的是什么?还是返回每个项目的原始列表的地图?您是否查看过这两个函数的文档?
  • 我认为我的问题是错误的。我需要新过滤器仅包含通过指定索引实现的少于 10 个字符的名称。但是,它正在迭代并给我 2 个输出。 “mark”和“mark”这不是我想要的输出。我不明白发生了什么,因此提出了问题。
  • usernames.filter(m =&gt; m.length &lt; 10)
  • @NicholasTower 谢谢,这真的很有帮助,也解决了我的困惑,因为我可以看到我哪里出错了。感谢您抽出宝贵时间。

标签: javascript arrays dictionary filter


【解决方案1】:

将返回更改为return usernames.filter((m) =&gt; usernames.length &lt; 10).map((m) =&gt; usernames)[0]; 以从过滤后的数组中取回第一个元素

【讨论】:

  • 它解决了我无法过滤的问题,但给了我 2 个输出。 validUserNames(usernames) (2) ["mark", "mark"]0: "mark"1: "mark"length: 2[[Prototype]]: Array(0) 我认为它正在遍历数组并打印它两次出去。我该如何解决这个问题?
  • 啊。我看到了这个问题。过滤m.length &lt; 10
【解决方案2】:

过滤后不要映射数组:

const usernames = ["mark", "staceysmom197800000"];
function validUserNames(usernames) {
  return usernames.filter((m) => m.length < 10);
}

console.log(validUserNames(usernames));

【讨论】:

  • 这让我回到了我的老问题,即两个名称都被返回而没有被过滤。我的过滤是针对少于 10 个字符的名称。
  • 很遗憾,无法在此处添加屏幕截图。但是,这是我的输出。 (2) ["mark", "staceysmom197800000"] 但是,当我用 m.length 替换 usernames.length 时,它工作正常。
  • 原来你使用的是usernames.length(如here所说)。由于usernames.length 为 2,因此过滤器函数将始终返回 true。您需要改用 m
  • @MrMythical 没注意到。谢谢!
【解决方案3】:

真的,他们都拥有它,但使用 m 而不是用户名。 “m”是函数局部变量,usernames是函数外的变量。

const usernames = ["mark", "staceysmom197800000"];
function validUserNames(usernames) {
  return usernames.filter((m) => m.length < 10);
}

console.log(validUserNames(usernames));

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多