我想用前缀path
更新对象中的http://127.0.0.1
我应该在Ramda中使用哪种方法?
const data = [
{ id: 1, path: '/abc/1.jpg' },
{ id: 2, path: '/abc/2.jpg' },
{ id: 3, path: '/abc/1.jpg' },
];
// ES6 way
const R1 = data.map(item => {
return {
...item,
path: `http://127.0.0.1${item.path}`
}
});
我尝试使用R.assoc
替换值。
但是我不知道如何获取原始路径值
请引导我。
// Ramda way ??
const R2 = R.map(
R.assoc('path', 'http://127.0.0.1'),
data
)
答案 0 :(得分:2)
我可以想到两种非常简单的方法来实现这一点。还有很多不是没有重点的。
第一个看起来像这样:
const {map, over, lensProp, concat} = R
const transform = map(over(lensProp('path'), concat('http://127.0.0.1')))
const data = [{"id": 1, "path": "/abc/1.jpg"},
{"id": 2, "path": "/abc/2.jpg"},
{"id": 3, "path": "/abc/1.jpg"}]
console.log(transform(data))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
第二个看起来像这样:
const {map, evolve, concat} = R
const transform = map(evolve({path: concat('http://127.0.0.1')}))
const data = [{"id": 1, "path": "/abc/1.jpg"},
{"id": 2, "path": "/abc/2.jpg"},
{"id": 3, "path": "/abc/1.jpg"}]
console.log(transform(data))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
第一种方法使用更多标准的FP工具:镜头。来自其他语言或图书馆的人会更容易识别它。
第二种方法的优点是,当数据不完全是您想要的时,它会更健壮。而且,如果您想添加其他转换,则不会有链式调用,只有规范中传递给evolve
的其他元素。
当然,如果您想放弃无积分,您可以使用
const transform = map(item => assoc('path', 'http://123.0.0.1' + item.path, item))