javascript - Array.filter 没有返回预期的输出
问题描述
我有一个嵌套的数据数组。我能够根据我的情况获得第一组数据,但是当我应用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"}]}]
现在基于原因,即原因1 或原因2,我想得到描述。但是当我申请Array.filter
时,它会将输出返回为未定义。
我哪里错了?
解决方案
您将在过滤后的数组上应用过滤器以获得结果,但是由于它将是一个数组数组,您需要在过滤之前映射过滤后的数组。
但是,您可以简单地使用 reducer 来展平初始 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);
推荐阅读
- php - Laravel Eloquent - 忽略子句的地方
- ios - 发送推送以唤醒带有警报横幅(和声音)的应用程序的正确方法
- python - 当我明确定义它时,为什么我的程序返回“NoneType”对象不可下标错误?
- jquery - 具有动态值的 Jquery 选择器
- c# - 无法导航到 .Net Core 3.1 应用程序中的页面
- c++ - 模板类的非模板友元是否被实例化?
- php - 未定义索引 - 奇怪的行为
- azure - 在 Azure 搜索同义词映射中创建多个规则不起作用
- xcode - SwiftUI - 将 SceneKit 场景添加到 MacOS 项目
- purescript - purescript的类型系统可以解决结节的行吗