Ramda - 附加路径
Ramda - appendPath
我正在开始使用 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]
}
}
}
有没有更简单的方法?
谢谢
我会尝试一些不同的东西。
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>
虽然可能有一种方法可以做到这一点 point-free,但它看起来足够可读了。
我正在开始使用 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]
}
}
}
有没有更简单的方法?
谢谢
我会尝试一些不同的东西。
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>
虽然可能有一种方法可以做到这一点 point-free,但它看起来足够可读了。