高效篩選json嵌套數(shù)組:精準(zhǔn)定位特定status值
處理JSON數(shù)據(jù)時,常常需要從嵌套數(shù)組中提取符合特定條件的數(shù)據(jù)。本文演示如何從包含嵌套數(shù)組的JSON數(shù)據(jù)中,精確篩選出status值為0和1的元素。
示例JSON數(shù)據(jù):
const data = [ { "id": 1, "name": "alice", age: [{ id: 4, status: 0 }] }, { "id": 2, "name": "bob", age: [{ id: 4, status: 1 }] }, { "id": 3, "name": "charlie", age: [{ id: 4, status: 1 }] } ];
目標(biāo)是從data數(shù)組中,分別篩選出age數(shù)組內(nèi)包含status為0和status為1的對象。
JavaScript的Filter()和some()方法可以實現(xiàn)此目標(biāo)。filter()創(chuàng)建包含通過測試元素的新數(shù)組;some()測試數(shù)組中至少一個元素是否通過測試。
首先,篩選status為0的元素:
const status0 = data.filter(item => item.age.some(a => a.status === 0)); console.log(status0);
filter()遍歷data數(shù)組中的每個對象。對于每個對象,some()檢查其age數(shù)組中是否存在status為0的元素。如果存在,則該對象添加到status0數(shù)組。
接下來,篩選status為1的元素:
const status1 = data.filter(item => item.age.some(a => a.status === 1)); console.log(status1);
此代碼與篩選status為0的代碼類似,僅將a.status === 0替換為a.status === 1。
如果age數(shù)組可能包含多個元素,且需要篩選出age數(shù)組中包含status為0或1的對象,同時去除age數(shù)組中不符合條件的元素,則需要更復(fù)雜的處理:
const data = [ { "id": 1, "name": "Alice", age: [{ id: 4, status: 0 }, { id: 5, status: 1 }] }, { "id": 2, "name": "Bob", age: [{ id: 4, status: 1 }, { id: 5, status: 2 }] }, { "id": 3, "name": "Charlie", age: [{ id: 4, status: 1 }, { id: 5, status: 3 }] } ]; const status0 = data.map(item => ({ ...item, age: item.age.filter(a => a.status === 0) })).filter(item => item.age.length > 0); console.log(status0); const status1 = data.map(item => ({ ...item, age: item.age.filter(a => a.status === 1) })).filter(item => item.age.length > 0); console.log(status1);
這段代碼使用map()方法處理每個對象,filter()方法篩選出age數(shù)組中符合條件的元素,并使用filter()方法過濾掉age數(shù)組為空的對象。
通過這些方法,可以高效地從JSON數(shù)據(jù)中提取所需的數(shù)據(jù)集合。