我开始使用Ramda
的新项目,我正在寻找一些函数将项目附加到给定路径上的数组。在Immutable.js
中,它被称为pushIn
。 Ramda
中有任何等价物吗?
我找到了合并append
,assocPath
和path
的工作方法,但看起来很奇怪。
const state = {
groups: {
1: {
items: [1, 2]
}
}
}
const paths = ['groups', 1, 'items'];
const result = R.assocPath(paths, R.append(3, R.path(paths, state)), state);
Result: {
groups: {
1: {
items: [1, 2, 3]
}
}
}
有没有更简单的方法?
谢谢
答案 0 :(得分:0)
我会尝试一些不同的东西。
const {over, lensPath, append} = R
const state = {groups:{1:{items:[1, 2]}}}
const addItem = (item, state) => over(lensPath(['groups', 1, 'items']), append(item), state)
console.log(addItem(3, state))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
虽然可能有一种方法可以实现这一点,但这似乎足够可读。