[英]JavaScript: How to filter array by values nested in object 2 level deep
我有一組對象。
在數組的每個 object 中,可以有多個“Book”對象,都帶有動態鍵。 我想要至少有一本新的“書”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},
},
]
所以我過濾后的數組將由原始數組的第一個和最后一個元素組成
預期過濾數組
const arr = [
{
id: '123',
book1242: {isNew: true},
book9023: {isNew: false},
},
{
id: '123',
book6534: {isNew: true},
book9313: {isNew: false},
},
]
我試過使用filter
和map
,但我到了必須循環檢查哪本書是新書的地步,我不確定如何在過濾器中返回 object 。
聽起來你想要這樣的東西:
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))
您可以將Array#some
與Object.values
一起使用。
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 res = arr.filter(obj=>Object.values(obj).some(({isNew})=>isNew)); console.log(res);
const arr=[{id:"123",book1242:{isNew:,0}:book9023:{isNew,:1}},{id:"123":book0374,{isNew::1},book9423:{isNew,:1}}:{id,"123":book8423:{isNew,:1},book9023:{isNew:,1}}:{id:"123";book6534.{isNew,.0}.book9313,{isNew..1}}]; const res = arr.filter(obj => { for(const [key, val] of Object.entries(obj)){ if(key.substring(0,4) === 'book' && val.isNew === true){ return obj } } }) console.log(res)
let sorted =[]
arr.forEach((el, i) => {
let obj_values = Object.values(el);
obj_values = obj_values.filter((elem) => typeof elem == 'object' && elem.isNew == true);
if(obj_values.length) sorted.push(arr[i])
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.