首页 > 解决方案 > JavaScript:如何按嵌套在对象 2 级深处的值过滤数组

问题描述

我有一个对象数组。

在数组的每个对象中,可以有多个“Book”对象,所有对象都具有动态键。我想要至少有一个新的“书”对象的对象。

例如:

const arr = [
  {
    id: '123',
    book1242: {isNew: true},
    book9023: {isNew: false},
  },
  {
    id: '123',
    book0374: {isNew: false},
    book9423: {isNew: false},
  },
  {
    id: '123',
    book8423: {isNew: false},
    book9023: {isNew: false},
  },
  {
    id: '123',
    book6534: {isNew: true},
    book9313: {isNew: false},
  },
]

所以我的过滤数组将由原始数组的第一个和最后一个元素组成

预期的过滤数组

const arr = [
  {
    id: '123',
    book1242: {isNew: true},
    book9023: {isNew: false},
  },
  {
    id: '123',
    book6534: {isNew: true},
    book9313: {isNew: false},
  },
]

我试过使用filterand map,但我到了必须循环检查哪本书是新书的地步,我不确定如何在过滤器中返回该对象。

标签: javascriptarraysobject

解决方案


听起来你想要这样的东西:

arr.filter((o) => Object.values(o).some((b) => b.isNew))

您的数组是否只有id和的键bookwxyz?如果不是,您可能需要检查这些值以确保它们不是未定义的

您还可以使用 Object.entries 和正则表达式显式检查密钥:

arr.filter((o) => Object.entries(o).some(([key, value]) => /book\d{4}/.test(key) && value.isNew))


推荐阅读