【发布时间】:2019-06-15 19:04:42
【问题描述】:
有了这个对象:
const state = {
a: {position: 1},
b: {position: 2},
c: {position: 3},
d: {position: 4},
e: {position: 5},
}
我想删除 b 对象,然后将 position 从具有较高位置的对象中减少 1(所以只是到 c、d 和 e)。结果状态应该是:
{
a: {position: 1},
c: {position: 2},
d: {position: 3},
e: {position: 4},
}
在玩了 Ramda 之后,我得到了这样的结果:
const removeElement = (state, elementId) => {
const newState = dissoc('b', state)
return pipe(
filter((currentDoc) => currentDoc.position > state[elementId].position),
clone,
forEachObjIndexed((value, key) => (value.position-=1), __),
merge(newState)
)(newState)
}
removeElement(state, 'b')
它有效,但我对它并不完全满意,因为我觉得它有点冗长。你觉得有更好的写法吗?
【问题讨论】:
-
你应该使用
Map,而不是位置可以通过插入顺序隐式编码
标签: javascript functional-programming ramda.js