我需要通过合并有效载荷对象来用列表中的某些id更新项目的创建函数。
in ramda.js way
export const updateItem = <T extends { id: I }, I>(items: T[], id: I, payload: Partial<T>) =>
items.map(
item => item.id === id
? ({ ...item, ...payload })
: item
)发布于 2022-09-19 20:42:45
因此,首先我们要找到要更改的项的索引:
R.findIndex(R.propEq('id', id))如果是-1,那么我们就不需要做任何事情(返回项目)。否则,我们必须通过将有效负载合并到该索引处的项来调整项目。
R.pipe(
R.findIndex(R.propEq('id', id)),
R.ifElse(
R.equals(-1),
R.always(R.identity),
R.adjust(R.__, R.mergeLeft(payload))
)
)最后,我们只将项应用于该管道,然后再次将项应用于管道的结果:
const updateItem = R.curry((id, payload, items) => {
return R.converge(R.applyTo, [
R.identity,
R.pipe(
R.findIndex(R.propEq('id', id)),
R.ifElse(
R.equals(-1),
R.always(R.identity),
R.adjust(R.__, R.mergeLeft(payload))
)
)
])(items)
});https://stackoverflow.com/questions/73770224
复制相似问题