使用javascript筛选数组对象的数组对象内的数据

使用javascript筛选数组对象的数组对象内的数据,javascript,typescript,Javascript,Typescript,我正在尝试过滤数组对象的数组对象内的数据,有关详细信息,请查找下面的代码 var数据=[ { 名称:'testdata1', 子数据:[{状态:'fail'},{状态:'success'}] }, { 名称:'testdata2', 子数据:[{状态:'fail'},{状态:'success'}] } ] 预期数据: var successdata=[ { 名称:'testdata1', 子数据:[状态:'success'}] }, { 名称:'testdata2', 子数据:[状态:'suc

我正在尝试过滤数组对象的数组对象内的数据,有关详细信息,请查找下面的代码

var数据=[
{
名称:'testdata1',
子数据:[{状态:'fail'},{状态:'success'}]
},
{
名称:'testdata2',
子数据:[{状态:'fail'},{状态:'success'}]
}
]
预期数据:

var successdata=[
{
名称:'testdata1',
子数据:[状态:'success'}]
},
{
名称:'testdata2',
子数据:[状态:'success'}]
}
];
var失效数据=[
{
名称:'testdata1',
子数据:[{状态:'fail'}]
},
{
名称:'testdata2',
子数据:[{状态:'fail'}]
}
];

我缺少大括号,因此我正在更新

您可以使用Array.map()映射数组:

var data=[{name:'testdata1',子数据:[{status:'fail'},{status:'success'}]},{name:'testdata2',子数据:[{status:'success'},{status:'fail'}]}]
var successData=filterByStatus('success',data);
var故障数据=过滤器系统状态(“故障”,数据);
功能过滤器系统状态(状态、数据){
返回data.map(d=>{
var newObj=Object.assign({},d);
newObj.subdata=newObj.subdata.filter(s=>s.status===status);
返回newObj;
});
}
console.log('successData',successData);

console.log('failureData',failureData)我想您要做的是根据子数据状态筛选数组。 我还猜想子数据应该只有status属性,您的代码应该是:var data=[{name:'testdata1',子数据:[{status:'fail'},{status:'success'}]}

然后,您需要查看子数据数组,并找出其中哪些数据成功,哪些数据失败

因此,您可能要寻找的是:

var successData = data.filter(sdata => { 
   var successFlag=false;
   sdata.subdata.forEach(subdata=>{
       if (subdata.status==='success'){
            successFlag = true;
       }
   }
   return successFlag;
}  
故障数据也是如此

有关更多信息,请查看Array.prototype.filter函数:

另外,正如在对您的问题的评论中提到的,您的子数据数组不能是具有两个相同属性的对象

希望这有所帮助

const数据=[{
名称:“testdata1”,子数据:[{status:'fail'}{
地位:
“成功”
}]
},
{
名称:“testdata2”,子数据:
[{status:'success'},{status:'fail'}]
}
];
常量过滤器数据=(数据,状态)=>data.reduce((acc,val)=>{
const sub=val.subdata.map((v)=>v.status===status?({name:val.name,子数据:[v]}):null)。过滤器(f=>f!==null);
返回acc.concat(sub);
}, []);
const successData=filterData(数据“success”);
const failureData=filterData(数据“fail”);
console.log('successData',successData);

console.log('failureData',failureData);
您不能这样做。重复的属性将替换以前的属性。同一对象不能有重复的属性名。类似于您的情况下的“status”属性。请使用foloowing data var data=[{name:'testdata1',子数据:[{status:'fail'},status:'success'}]},{name:'testdata2',子数据:[{status:'success'},{status:'fail'}]}]我已经用新数据更新了我的答案,请检查请使用foloowing数据var data=[{name:'testdata1',子数据:[{status:'fail'},status:'success'},{name:'testdata2',子数据:[{status:'success'},{status:'fail'}]请使用foloowing数据var=[{name:'testdata1',子数据:[{status:'fail'},status:'success'}]},{name:'testdata2',子数据:[{status:'success'},{status:'fail'}]}]嗨@Alex:我的要求和这个问题差不多。我也尝试了你的答案,但没有得到确切的结果。你能帮我吗?嗨@Aanandham。不太清楚你的意思。你是说这样的吗?嗨@Alex,我按照你上面建议的方式得到了结果:
var successData = data.filter(sdata => { 
   var successFlag=false;
   sdata.subdata.forEach(subdata=>{
       if (subdata.status==='success'){
            successFlag = true;
       }
   }
   return successFlag;
}