С этим объектом:
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},
}
Порадевшись с Рамдой, я закончил примерно так:
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')
Это работает, но я не совсем доволенэто потому что я нахожу это немного многословным.Как вы думаете, есть лучший способ написать это?