Ramda 根据嵌套值从数组中删除对象

Ramda remove objects from array based on nested value

如果嵌套数据中存在特定值,我将尝试从对象数组中删除一个对象。

从 API 返回的数据的形状如下:

Array [
  Object {
    "id": "/db/Shifts/123",
    "applicants": Object {
      "applicants": Array [
        "/db/User/12",
        "/db/User/13",
      ],
  },
  Object {
    "id": "/db/Shifts/456",
    "applicants": Object {
      "applicants": Array [
        "/db/User/12",
        "/db/User/14",
      ],
  },  
  Object {
    "id": "/db/Shifts/789",
    "applicants": Object {
      "applicants": Array [
        "/db/User/13",
        "/db/User/14",
      ],
  },
]

使用 Ramda,我将如何过滤掉申请人数组中存在用户 12 的班次,该班次位于 applicants.applicants。

在这种情况下我无法展平数据,每个班次的申请人列表必须是包含在对象中的数组。

我试过这个:

var hasApplied = pathEq(['applicants', 'applicants'], 'db/User/12');
console.log(filter(hasApplied, shifts));

但我认为这不太正确,因为 applicants.applicants 是一个数组,我觉得我需要再给它一个函数才能进入申请人数组,但我不确定什么。

您对 R.pathEq 的使用会导致将用户 ID 与每个 ID 数组进行相等性比较,而不是检查每个数组是否包含给定的 ID。

您可以改用 R.pathSatisfies along with R.contains

const hasApplied = R.pathSatisfies(R.contains('/db/User/12'), ['applicants', 'applicants'])