簡體   English   中英

使用JavaScript過濾數組對象的數組對象內的數據

[英]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.

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