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