繁体   English   中英

JavaScript:如何过滤嵌套对象数组?

[英]JavaScript: How to filter an array of nested objects?

我有一个这样的数组

const arr = [
  {
    id: '123',
    book: {isNew: true}
  },
  {
    id: '123',
    book: {isNew: false}
  },
  {
    id: '123',
    book: {isNew: false}
  },
  {
    id: '123',
    book: {isNew: true}
  },
]

我试图过滤数组以仅返回书 object 中 isNew 为真的对象。

我试图做这样的事情

arr.filter(obj => {
  // Use a forEach to determine which book obj is new
}

但是,forEach 不能返回任何值。

编辑

似乎我原来的解释方式有点欠缺。

在数组的每个 obj 中,可以有多个“Book”对象。 全部带有动态键。 我想要 object 和至少一本新的“书”object。

例如:

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},
  },
]

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

这样的事情怎么样

arr.filter(({ book: { isNew } }) => isNew)

我只是使用数据结构来获取isNew属性并仅返回 TRUE 值

更新:

({ book: { isNew } })这只是另一种写法

arr.filter((object) => object.book.isNew)

更新:

问题是关于动态 [key] 我提出了 2 解决方案 1 -

arr.filter((item) => {
  for (const key of Object.keys(item)) {
    const { isNew } = item[key]
    if (typeof isNew === 'boolean') return isNew
  }
})

我在哪里过滤和循环每个键并检查是否有键 [ isNew ] 的属性
如果有的话会退货

另一种写法

arr.filter((item) => {
  for (const key of Object.keys(item))
    if (item[key].hasOwnProperty('isNew')) return item[key].isNew
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM