首页 > 解决方案 > 我对此功能未定义

问题描述

我正在尝试使用 filter 函数来构建一个新数组,该数组仅提供长度小于 10 的字符串值。然而,该函数正在产生未定义的值。

let move = (strings) => {
  console.log('I got here');
  let special = strings.length < 10;
  if (special) {
    console.log(strings);
    return strings;
  }
  console.log(strings);
};

const username = [];

const validUserNames = (username) => {
  username.filter(move);
};

//代码预计是这样调用的

//validUserNames(["Paul", "Barnabas", "Timothy", "Judas Iscariot"])

//预期结果:保罗、巴拿巴、提摩太

标签: javascript

解决方案


move函数中,您需要返回一个布尔值。更改如下:

let move = (string) => {
  console.log('I got here');
  let special = string.length < 10;
  if (special) {
    console.log(string);
    return special;
  }
  console.log(string);
};

我改变了一些其他的东西。

filter该函数在通过数组时采用单个值,因此我更改stringsstring.

从技术上讲,它可以简化为这一点。

let move = (string) => {
  return string.length < 10;
};

我认为还有一些你不理解的东西。拥有此代码不会做任何事情。

const validUserNames = (usernames) => {
  usernames.filter(move);
}

validUserNames(["Paul", "Barnabas", "Timothy", "Judas Iscariot"]);

首先,usernames.filter不对usernames数组做任何事情,它返回过滤器的结果。其次,因为您没有返回过滤器的此结果,validUserNames所以不会返回任何内容。第三,除非您将 validUserNames 的结果存储在变量中,否则应用程序的状态不会发生任何变化。

我建议你把上面的改成这个。

const validUserNames = usernames.filter(move);

validUserNames然后将存储长度​​小于 10 的字符串数组。


推荐阅读