簡體   English   中英

JavaScript:如何通過嵌套在 object 2 層深的值過濾數組

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

我試過使用filtermap ,但我到了必須循環檢查哪本書是新書的地步,我不確定如何在過濾器中返回 object 。

聽起來你想要這樣的東西:

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

您的數組只會有idbookwxyz鍵嗎? 如果不是,您可能需要對值進行一些檢查以確保它們不是未定義的

您還可以使用 Object.entries 和正則表達式顯式檢查密鑰:

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

您可以將Array#someObject.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM