[英]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.