我有一个像这样的数组
const arr = [
{
id: '123',
book: {isNew: true}
},
{
id: '123',
book: {isNew: false}
},
{
id: '123',
book: {isNew: false}
},
{
id: '123',
book: {isNew: true}
},
]
我正在尝试过滤数组以仅返回book对象具有isNew为true的对象。
我正在尝试这样的事情
arr.filter(obj => {
// Use a forEach to determine which book obj is new
}
但是forEach不能返回任何值。
编辑
似乎缺少我最初的解释方式。
在数组的每个obj中,可以有多个“ Book”对象。全部带有动态键。我希望该对象具有至少一个新的“ 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},
},
]
所以我过滤后的数组将由原始数组的第一个和最后一个元素组成
答案 0 :(得分:1)
那样的事情
arr.filter(({ book: { isNew } }) => isNew)
我只是使用数据结构来获取 isNew 属性并仅返回TRUE值
({书:{isNew}}} 只是另一种书写方式
arr.filter((object) => object.book.isNew)
问题是关于动态[键],我提供了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
})