【问题标题】:Filter an array based on attribute根据属性过滤数组
【发布时间】:2021-12-28 13:39:18
【问题描述】:

我喜欢根据传递的值过滤对象数组并返回修改后的数组。

例如:

let jsonData = [
          {
            "id": "300",
            "name": "item1",
            "showtimes": ["December 28, 2021", "December 30, 2021"]
          },
          {
            "id": "223",
            "name": "item2",
            "showtimes": ["January, 4 2022"]
          },
          {
            "id": "888",
            "name": "item3",
            "showtimes": ["December 28, 2021", "December 25, 2021", "December 29, 2021"]
          },
        ]

我很想在“2021 年 12 月 28 日”过后得到这个修改后的数组:

     [
          {
            "id": "300",
            "name": "item1",
            "showtimes": ["December 28, 2021", "December 30, 2021"]
          },               {
            "id": "888",
            "name": "item3",
            "showtimes": ["December 28, 2021", "December 25, 2021", "December 29, 2021"]
          },
        ]

这是我目前拥有的,但没有给出所需的数组:

const result = jsonData.map((x) => {
    return x.showtimes.filter(y => y === 'December 28, 2021');
    })

【问题讨论】:

  • 使用Array.filter参见MDN
  • @tromgy 我试过了,但它只返回日期而不是修改后的数组。你能检查一下编辑过的问题,看看我做得对吗
  • jsonData.filter((x) => { return x.showtimes.includes( 'December 28, 2021'); })

标签: javascript arrays filter


【解决方案1】:

使用includes 并返回整个元素

const result = jsonData.map((x) => {
if (x.showtimes.includes('December 28, 2021')) {
  return x;
}})    

[{
  id: "300",
  name: "item1",
  showtimes: ["December 28, 2021", "December 30, 2021"]
}, undefined, {
  id: "888",
  name: "item3",
  showtimes: ["December 28, 2021", "December 25, 2021", "December 29, 2021"]
}]

【讨论】:

    猜你喜欢
    • 2015-10-13
    • 2018-07-06
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2020-02-29
    • 2018-12-25
    • 2016-05-15
    • 2021-04-15
    相关资源
    最近更新 更多