【发布时间】:2020-01-17 02:52:58
【问题描述】:
我有一组时间序列对象,需要在 React 中过滤。
具体来说,我需要返回一个包含对象数组的过滤子集的数组,基于device_id 的值等于例如7F34B296.
原始数组如下所示:
[
{
"label": "time_stamp",
"data": [
"2019-04-17 21:01:25.673949957+02:00",
"2019-04-17 21:01:30.673949957+02:00",
"2019-04-17 21:01:35.673949957+02:00",
"2019-04-17 21:01:40.673949957+02:00",
"2019-04-17 21:01:45.673949957+02:00"
]
},
{
"label": "device_id",
"data": [
"7F34B296",
"7F34B296",
"7F34B296",
"AB22438D",
"AB22438D"
]
},
{
"label": "parameter_x",
"data": [
"929.1965116",
"927.5152582",
"928.7476077",
"1919.2691327",
"1918.7047619"
]
}
]
预期的输出数组(过滤后)如下所示:
[
{
"label": "time_stamp",
"data": [
"2019-04-17 21:01:25.673949957+02:00",
"2019-04-17 21:01:30.673949957+02:00",
"2019-04-17 21:01:35.673949957+02:00"
]
},
{
"label": "device_id",
"data": [
"7F34B296",
"7F34B296",
"7F34B296"
]
},
{
"label": "parameter_x",
"data": [
"929.1965116",
"927.5152582",
"928.7476077"
]
}
]
我尝试使用各种方法,包括以下方法 - 但我似乎无法获得所需的结果。我想我错过了关于如何处理整个对象数组的过滤应该取决于其中一个对象的子集的值的部分。
const filters = [
{
predicateFn: data => data.data == "7F34B296"
}
];
function getFilteredPersons(filters) {
return datasets.filter(p => filters.every(filter => filter.predicateFn(p)));
}
console.log(getFilteredPersons(filters));
【问题讨论】:
-
那么对象中的每个数组的排序顺序是一样的吗?
-
是的,没错。原始数据来自基于简单 CSV 数据库的 SQL 查询。为了避免必须为每个
device_id调用 SQL 查询,我将 device_id 作为列包含在查询输出中,并旨在过滤获取的数据以将其拆分为device_id。我还没有找到其他必须根据其中一个数组的对象数据过滤整个数组的帖子。 -
它本身不适用于
filter,你需要map对象-在每个条目中添加id,然后filter,最终mapping并删除添加的id -
或者在一个不可读的嵌套循环中进行。
-
device_id 总是在数组的索引 1 处吗?
标签: javascript arrays reactjs filter