首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript Helper \ startsWith( )不是函数

JavaScript Helper \ startsWith( )不是函数
EN

Stack Overflow用户
提问于 2019-01-20 00:55:43
回答 1查看 6.6K关注 0票数 2

我需要编写一个助手函数,它循环遍历对象数组&过滤所有符合既定标准的名称。在我的例子中,所有以Zach开头的名称

数组示例:

代码语言:javascript
复制
const users = [
  {
    firstName: "Zach",
    id: 1,
    lastName: "Volsk"
  },
  {
    firstName: "Surly",
    id: 2,
    lastName: "Furious"
  },

  {
    firstName: "Zach",
    id: 3,
    lastName: "Tee"
  },
  {
    firstName: "Eve",
    id: 4,
    lastName: "Zelda"
  },

  {
    firstName: "Zachary",
    id: 5,
    lastName: "Toys"
  }
];

我能够检索所需的结果,应用过滤器并直接映射,即:

代码语言:javascript
复制
const filterZach = users
  .filter(user => user.firstName.startsWith("Zach"))
  .map(user => {
    return `<p>${user.firstName} ${user.lastName}</p>`;
  }).join(""); // get rid of comas

期望结果:Zach Volsk, Zach Tee, Zachary Toys

然而,当我试图将该功能抽象为帮助器方法时,,以便我可以在代码的其他地方使用它:即:

代码语言:javascript
复制
// helper
function filteredNames(arr, str) {
  return arr.filter(i => i.startsWith(str));
}

我收到一个错误: i.startsWith不是一个函数

代码语言:javascript
复制
const filterZach = filteredNames(users, "Zach") // i.startsWith is not a function
const renderZach = filterZach.map(user => {
    return `<p>${user.firstName} ${user.lastName}</p>`;
  }).join("");

问题:,您能帮我理解一下这个问题的原因吗?请告诉我使用帮助函数实现目标的另一种方法?

我没有嫁给startsWith( )方法,我很想学习其他的方法来解决这个问题。也许会减少?

这是一个代码沙箱

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-20 00:57:28

filteredNames内部,对于arr.filter(ii是一个对象,而不是字符串,而对象没有startsWith方法。引用对象的firstName,然后对其调用startsWith

代码语言:javascript
复制
// helper
function filteredNames(arr, str) {
  return arr.filter(i => i.firstName.startsWith(str));
}

代码语言:javascript
复制
const users = [
  {
    firstName: "Zach",
    id: 1,
    lastName: "Volsk"
  },
  {
    firstName: "Surly",
    id: 2,
    lastName: "Furious"
  },

  {
    firstName: "Zach",
    id: 4,
    lastName: "Tee"
  },
  {
    firstName: "Eve",
    id: 5,
    lastName: "Zelda"
  },

  {
    firstName: "Zachary",
    id: 6,
    lastName: "Toys"
  }
];
// helper
function filteredNames(arr, str) {
  return arr.filter(i => i.firstName.startsWith(str));
}
const filterZach = filteredNames(users, "Zach") // i.startsWith is not a function
const renderZach = filterZach.map(user => {
    return `<p>${user.firstName} ${user.lastName}</p>`;
  }).join("");
document.body.innerHTML += renderZach;

对于要调用startsWith的动态属性名称,请将该属性名称传递给filteredNames,例如

代码语言:javascript
复制
function filteredNames(arr, str, prop) {
  return arr.filter(i => i[prop].startsWith(str));
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54272678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档