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'])
如果嵌套数据中存在特定值,我将尝试从对象数组中删除一个对象。
从 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'])