[英]Filter data inside array object of array object using javascript
我正在嘗試過濾數組對象的數組對象內的數據,請查找以下代碼以獲取更多信息。
var data = [
{
name:'testdata1',
subdata:[{status:'fail'},{status:'success'}]
},
{
name:'testdata2',
subdata:[{status:'fail'},{status:'success'}]
}
]
預期數據:
var successdata = [
{
name:'testdata1',
subdata:[status:'success'}]
},
{
name:'testdata2',
subdata:[status:'success'}]
}
];
var FailureData =[
{
name:'testdata1',
subdata:[{status:'fail'}]
},
{
name:'testdata2',
subdata:[{status:'fail'}]
}
];
我錯過了花括號,所以我正在更新
您可以使用Array.map()映射數組:
var successData = data.map(item => ({name: item.name, subdata:[{status:'success'}]})
var data = [{name:'testdata1',subdata:[{status:'fail'}, {status:'success'}] },{name:'testdata2',subdata:[{status:'success'}, {status:'fail'}] }] var successData = filterByStatus('success', data); var failureData = filterByStatus('fail', data); function filterByStatus(status, data) { return data.map(d => { var newObj = Object.assign({}, d); newObj.subdata = newObj.subdata.filter(s => s.status === status); return newObj; }); } console.log('successData', successData); console.log('failureData', failureData);
如果對象中有一個成功屬性,則可以執行所需的操作之一
我猜您想做的是根據子數據狀態過濾數組。 我還猜想子數據應該只有status屬性,而您的代碼應該是:var data = [{name:'testdata1',subdata:[{status:'fail'},{status:'success'}]} 。
然后,您想要查看子數據數組,並找到其中包含成功和失敗數據。
因此,您可能正在尋找的是:
var successData = data.filter(sdata => {
var successFlag=false;
sdata.subdata.forEach(subdata=>{
if (subdata.status==='success'){
successFlag = true;
}
}
return successFlag;
}
與failureData相同。
有關更多信息,您可以檢查Array.prototype.filter函數: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
PS也正如您對問題的評論中所述,您的子數據數組不能是具有兩個相同屬性的對象
希望這可以幫助。
const data = [{ name: 'testdata1', subdata: [{status: 'fail'}, { status: 'success' }] }, { name: 'testdata2', subdata: [{status: 'success'}, {status: 'fail'}] } ]; const filterData = (data, status) => data.reduce((acc, val) => { const sub = val.subdata.map((v) => v.status === status ? ({ name: val.name, subdata: [v] }) : null).filter(f => f !== null); return acc.concat(sub); }, []); const successData = filterData(data, 'success'); const failureData = filterData(data, 'fail'); console.log('successData', successData); console.log('failureData', failureData);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.