使用 ramda.js 替换键的值
Replace value of key using ramda.js
我有以下对象数组:
const originalArray = [
{name: 'name1', value: 10},
{name: 'name2', value: 20}
]
以及以下对象
names = {
name1: 'generic_name_1',
name2: 'generic_name_2'
}
我希望第一个数组像这样转换:
[
{name: 'generic_name_1', value: 10},
{name: 'generic_name_2', value: 20}
]
到目前为止我尝试了什么:
const replaceName = (names, obj) => {
if(obj['name'] in names){
obj['name'] = names[obj['name']];
}
return obj;
}
const modifiedArray = R.map(replaceName(names), originalArray)
是否有更像 ramda 的方法来做到这一点?
在 Ramda 函数中使用本机 JS 并非无礼。您的代码中唯一的问题是您改变了原始对象 - obj['name'] = names[obj['name']];
.
我会使用 R.when 来检查该名称是否存在于 names
对象中,以及它是否确实将对象演变为新名称。如果不是,将返回原始对象。
const { flip, has, prop, map, when, pipe, evolve } = R
const hasProp = flip(has)
const getProp = flip(prop)
const fn = names => map(when(
pipe(prop('name'), hasProp(names)),
evolve({
name: getProp(names)
})
))
const originalArray = [{"name":"name1","value":10},{"name":"name2","value":20},{"name":"name3","value":30}]
const names = {"name1":"generic_name_1","name2":"generic_name_2"}
const result = fn(names)(originalArray)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
我不会为此使用任何 Ramda 函数。我会简单地避免改变原始代码,也许使用这样的代码:
const transform = (names) => (arr) => arr .map (
({name, ... rest}) => ({name: names [name] || name, ... rest})
)
const originalArray = [{name: 'name1', value: 10},{name: 'name2', value: 20}]
const names = {name1: 'generic_name_1',name2: 'generic_name_2'}
console .log (
transform (names) (originalArray)
)
我有以下对象数组:
const originalArray = [
{name: 'name1', value: 10},
{name: 'name2', value: 20}
]
以及以下对象
names = {
name1: 'generic_name_1',
name2: 'generic_name_2'
}
我希望第一个数组像这样转换:
[
{name: 'generic_name_1', value: 10},
{name: 'generic_name_2', value: 20}
]
到目前为止我尝试了什么:
const replaceName = (names, obj) => {
if(obj['name'] in names){
obj['name'] = names[obj['name']];
}
return obj;
}
const modifiedArray = R.map(replaceName(names), originalArray)
是否有更像 ramda 的方法来做到这一点?
在 Ramda 函数中使用本机 JS 并非无礼。您的代码中唯一的问题是您改变了原始对象 - obj['name'] = names[obj['name']];
.
我会使用 R.when 来检查该名称是否存在于 names
对象中,以及它是否确实将对象演变为新名称。如果不是,将返回原始对象。
const { flip, has, prop, map, when, pipe, evolve } = R
const hasProp = flip(has)
const getProp = flip(prop)
const fn = names => map(when(
pipe(prop('name'), hasProp(names)),
evolve({
name: getProp(names)
})
))
const originalArray = [{"name":"name1","value":10},{"name":"name2","value":20},{"name":"name3","value":30}]
const names = {"name1":"generic_name_1","name2":"generic_name_2"}
const result = fn(names)(originalArray)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
我不会为此使用任何 Ramda 函数。我会简单地避免改变原始代码,也许使用这样的代码:
const transform = (names) => (arr) => arr .map (
({name, ... rest}) => ({name: names [name] || name, ... rest})
)
const originalArray = [{name: 'name1', value: 10},{name: 'name2', value: 20}]
const names = {name1: 'generic_name_1',name2: 'generic_name_2'}
console .log (
transform (names) (originalArray)
)