javascript - 如何在 React 中过滤对象数组

标签 javascript arrays reactjs filter

我有一个时间序列对象数组,需要在 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/

相关文章:

reactjs - react Material 用户界面 : createSvgIcon is not a function

javascript - meteor 中的服务配置应该放在哪里?在客户端还是在服务器端?

javascript - Lightbox2:如何在 "EDIT"和 "lb-prev"之间添加一个 "lb-next"<a>?

javascript - 更新 Vue CLI 全局

javascript - 为什么对象 "this"不是全局窗口对象的引用?

arrays - 如何直接修改Julia库Flux中的权重值?

css - react : background image not loading when deployed to server

javascript - 尝试呈现对多个 div 而非 ID 的多个 react

javascript - 从数组中随机选择对

javascript - 如何使用 onchange 事件调用函数将元素添加到数组中?