ramda 根据原始值更新对象值
ramda update object value base on original value
我想更新前缀为 http://127.0.0.1
的对象中的 path
我应该在 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
)
我可以想到两种相当简单的方法来做到这一点。也有很多不是无积分的。
第一个看起来像这样:
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))
我想更新前缀为 http://127.0.0.1
的对象中的 path
我应该在 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
)
我可以想到两种相当简单的方法来做到这一点。也有很多不是无积分的。
第一个看起来像这样:
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))