简体   繁体   English

使用JavaScript过滤数组对象的数组对象内的数据

[英]Filter data inside array object of array object using javascript

I am trying to filter data inside array object of array object, Please find below code for more information. 我正在尝试过滤数组对象的数组对象内的数据,请查找以下代码以获取更多信息。

var data = [
  {
    name:'testdata1',
    subdata:[{status:'fail'},{status:'success'}] 
  },
  {
    name:'testdata2',
    subdata:[{status:'fail'},{status:'success'}] 
  }
]

Expected Data: 预期数据:

var successdata = [
  {
    name:'testdata1',
    subdata:[status:'success'}]
  },
  {
    name:'testdata2',
    subdata:[status:'success'}] 
  }
];

var FailureData =[
  {
    name:'testdata1',
    subdata:[{status:'fail'}]
  },
  {
    name:'testdata2',
    subdata:[{status:'fail'}] 
  }
];

I missed curly braces,So i am updating 我错过了花括号,所以我正在更新

您可以使用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); 

one of possible ways to do what you want if you have one success property in your object 如果对象中有一个成功属性,则可以执行所需的操作之一

What I guess you want to do is filter the array based on subdata status. 我猜您想做的是根据子数据状态过滤数组。 I also guess that what subdata should have is just the status property and your code would be: var data = [{name:'testdata1',subdata:[{status:'fail'},{status:'success'}] }. 我还猜想子数据应该只有status属性,而您的代码应该是:var data = [{name:'testdata1',subdata:[{status:'fail'},{status:'success'}]} 。

Then you want to look in the subdata array and find which data have success and failure in them. 然后,您想要查看子数据数组,并找到其中包含成功和失败数据。

So what you could be looking for is this: 因此,您可能正在寻找的是:

var successData = data.filter(sdata => { 
   var successFlag=false;
   sdata.subdata.forEach(subdata=>{
       if (subdata.status==='success'){
            successFlag = true;
       }
   }
   return successFlag;
}  

The same with the failureData. 与failureData相同。

For more information you could check the Array.prototype.filter function: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter 有关更多信息,您可以检查Array.prototype.filter函数: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

PS As mentioned in a comment to your question as well, your subdata array cannot be an object with two of the same property PS也正如您对问题的评论中所述,您的子数据数组不能是具有两个相同属性的对象

Hope this helps. 希望这可以帮助。

 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