首页 > 解决方案 > 我怎样才能找到像“!”这样的特殊字符 或者 '?' 在 JavaScript 的对象数组中?

问题描述

我想用“!”找到用户名 和 '?' 在对象数组中并将它们存储在新数组中。

对象数组如下。

const array = [
  {
    username: "john!",
    team: "red",
    score: 5,
    items: ["ball", "book", "pen"]
  },
  {
    username: "becky",
    team: "blue",
    score: 10,
    items: ["tape", "backpack", "pen"]
  },
  {
    username: "susy?",
    team: "red",
    score: 55,
    items: ["ball", "eraser", "pen"]
  },
  {
    username: "tyson",
    team: "green",
    score: 1,
    items: ["book", "pen"]
  },

];

我尝试了循环的test()方法forEach,但我无法获得首选输出。我该怎么做?我可以使用map()而不是forEach遍历对象吗?

标签: javascriptarraysecmascript-6foreachjavascript-objects

解决方案


解决方案

这是您的问题的简单单行解决方案:

const arr = [
  {
    username: "john!",
    team: "red",
    score: 5,
    items: ["ball", "book", "pen"]
  },
  {
    username: "becky",
    team: "blue",
    score: 10,
    items: ["tape", "backpack", "pen"]
  },
  {
    username: "susy?",
    team: "red",
    score: 55,
    items: ["ball", "eraser", "pen"]
  },
  {
    username: "tyson",
    team: "green",
    score: 1,
    items: ["book", "pen"]
  },

]

let newArr = []

arr.forEach(({username}) => username.match(/[?|!]/g) ? newArr.push(username) : null)

console.log(newArr)

这个怎么运作

首先,我们使用以下方法遍历数组中的所有元素:

arr.forEach(({username}) => ...)

然后我们检查是否username包含'!' 或者 '?' 使用正则表达式(正则表达式):

username.match(/[?|!]/g)

如果它确实包含一个“?” 或者 '!' 然后将用户名推送到新数组:

newArr.push(username)

如果用户名不匹配,则返回null


推荐阅读