我有一个嵌套的数据数组。我能够根据我的条件获取第一组数据,但是当我对此结果集应用 Array.filter 时,它没有给我预期的结果。
{
"data": [
{
"Date": "02/04/2019",
"Total": "1000",
"Success": "850",
"Failure": "150",
"FailureDeatils": [
{
"name": "Reason1",
"Count": 2,
"Description": [
{
"DescriptionID": "01",
"Status": "Failure Point1"
},
{
"DescriptionID": "01",
"Status": "Failure Point1"
}
]
},
{
"name": "Reason2",
"Count": 6,
"Description": [
{
"DescriptionID": "01",
"Status": "Failure Point1"
},
{
"DescriptionID": "01",
"Status": "Failure Point1"
}
]
}
]
},
{
"Date": "03/04/2019",
"Total": "800",
"Success": "750",
"Failure": "150",
"FailureDeatils": [
{
"name": "Reason1",
"Count": 3,
"Description": [
{
"DescriptionID": "01",
"Status": "Failure Point1"
},
{
"DescriptionID": "01",
"Status": "Failure Point1"
}
]
},
{
"name": "Reason2",
"Count": 1,
"Description": [
{
"DescriptionID": "01",
"Status": "Failure Point1"
},
{
"DescriptionID": "01",
"Status": "Failure Point1"
}
]
}
]
}
]
}
首先,我应用了以下Array.filter
来根据日期获取FailureDetails:
var filtered = data
.filter(value => value.Date == "02/04/2019")
.map(e => e.FailureDeatils);
这将产生以下输出:
FailureDeatils:[{"name":"Reason1","Count":2,"Description":[{"DescriptionID": "01","Status": "Failure Point1"},{"DescriptionID": "01","Status": "Failure Point1"}]},{"name":"Reason2","Count":6,"Description":[{"DescriptionID": "01","Status": "Failure Point1"},{"DescriptionID": "01","Status": "Failure Point1"}]}]
现在根据Reason,即Reason1或Reason 2,我想获取描述。但是当我对其应用 Array.filter 时,它返回的输出为未定义。
我哪里出错了?
最佳答案
您可以在过滤后的数组上应用过滤器来获取结果,但是由于它将是一个数组的数组,因此您需要在过滤之前映射过滤后的数组。
但是,您可以简单地使用化简器来展平初始 FailureDescription 数组,而不是映射它。
var data = [
{
"Date": "02/04/2019",
"Total": "1000",
"Success": "850",
"Failure": "150",
"FailureDeatils": [
{
"name": "Reason1",
"Count": 2,
"Description": [
{
"DescriptionID": "01",
"Status": "Failure Point1"
},
{
"DescriptionID": "01",
"Status": "Failure Point1"
}
]
},
{
"name": "Reason2",
"Count": 6,
"Description": [
{
"DescriptionID": "01",
"Status": "Failure Point1"
},
{
"DescriptionID": "01",
"Status": "Failure Point1"
}
]
}
]
},
{
"Date": "03/04/2019",
"Total": "800",
"Success": "750",
"Failure": "150",
"FailureDeatils": [
{
"name": "Reason1",
"Count": 3,
"Description": [
{
"DescriptionID": "01",
"Status": "Failure Point1"
},
{
"DescriptionID": "01",
"Status": "Failure Point1"
}
]
},
{
"name": "Reason2",
"Count": 1,
"Description": [
{
"DescriptionID": "01",
"Status": "Failure Point1"
},
{
"DescriptionID": "01",
"Status": "Failure Point1"
}
]
}
]
}
]
var filtered = data
.filter(value => value.Date == "02/04/2019")
.reduce((acc,e) => acc.concat(e.FailureDeatils), []);
const reason = "Reason1";
var res = filtered.filter((data) => data.name == reason).reduce((acc, item) =>{
acc = acc.concat(item.Description);
return acc;
}, []);
console.log(res);
关于javascript - Array.filter 没有返回预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55842004/