我有一个时间序列对象数组,需要在 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));
最佳答案
也许尝试将您的数据映射到某种结构,例如:
const joinedData = []
data.map((element) =>
element.data.map((e, i) => joinedData[i] = { [element.label]: e, ...joinedData[i]}))
然后你将得到形状转换的数据:
[
{
parameter_x: '929.1965116',
device_id: '7F34B296',
time_stamp: '2019-04-17 21:01:25.673949957+02:00'
},
{
parameter_x: '927.5152582',
device_id: '7F34B296',
time_stamp: '2019-04-17 21:01:30.673949957+02:00'
},
{
parameter_x: '928.7476077',
device_id: '7F34B296',
time_stamp: '2019-04-17 21:01:35.673949957+02:00'
},
{
parameter_x: '1919.2691327',
device_id: 'AB22438D',
time_stamp: '2019-04-17 21:01:40.673949957+02:00'
},
{
parameter_x: '1918.7047619',
device_id: 'AB22438D',
time_stamp: '2019-04-17 21:01:45.673949957+02:00'
}
]
哪个更容易过滤
关于javascript - 如何在 React 中过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57953955/