使用 ramda 更改数组中的对象 属性
change an object property in array with ramda
我有一个对象数组,如下所示:
[{name:'name', key:'21',good: 'true'},
{name: 'another name', key:'22',good:'false'},
...]
现在我想更改此数组中的其中一个对象。我的第一次尝试是这样的:
const s = R.compose(
R.assoc('good', checked),
R.propEq('key', name),
R.map(),
);
但是此代码生成了我想要的那个对象,并且只有它的 'good'
属性。我想通过该更改获得整个数组。
我不得不对 checked 和 name 的值做出一些假设。
let checked = 'true'
let name = '22'
let input = [{name:'name', key:'21',good: 'true'},
{name: 'another name', key:'22',good:'false'}]
const update = R.map(R.ifElse(R.propEq('key', name), R.assoc('good', checked), (item) => item))
console.log(update(input))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>
我会这样做:
const alter = curry((checked, key, items) => map(
when(propEq('key', key), assoc('good', checked)),
items
))
alter('true', '22', items)
这样做的好处是不包含自由变量(例如原始版本中的 checked
和 name
。)如果您永远不需要此变量的部分版本,则可以放弃柯里化.
您可以在 Ramda REPL.
上看到实际效果
我会结合使用 Ramda 的查找、查找索引和更新。
假设您的数组名称是 array,并且您想更改数组第二个对象的键。
并且您想从“22”更改为“40”。
const objToChange = R.find(R.propEq('key', 22 ))(array); // To find the object you like to change.
objToChange.key = 40; // Change your desired field.
R.update(R.findIndex(R.propEq('key', 22))(array), objToChange,
patients); // And update the array with the new changed object.
或者只使用 findIndex ...
const index = R.findIndex(R.propEq('key', 22))(patients);
array[index].key = 40;
我有一个对象数组,如下所示:
[{name:'name', key:'21',good: 'true'},
{name: 'another name', key:'22',good:'false'},
...]
现在我想更改此数组中的其中一个对象。我的第一次尝试是这样的:
const s = R.compose(
R.assoc('good', checked),
R.propEq('key', name),
R.map(),
);
但是此代码生成了我想要的那个对象,并且只有它的 'good'
属性。我想通过该更改获得整个数组。
我不得不对 checked 和 name 的值做出一些假设。
let checked = 'true'
let name = '22'
let input = [{name:'name', key:'21',good: 'true'},
{name: 'another name', key:'22',good:'false'}]
const update = R.map(R.ifElse(R.propEq('key', name), R.assoc('good', checked), (item) => item))
console.log(update(input))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>
我会这样做:
const alter = curry((checked, key, items) => map(
when(propEq('key', key), assoc('good', checked)),
items
))
alter('true', '22', items)
这样做的好处是不包含自由变量(例如原始版本中的 checked
和 name
。)如果您永远不需要此变量的部分版本,则可以放弃柯里化.
您可以在 Ramda REPL.
上看到实际效果我会结合使用 Ramda 的查找、查找索引和更新。 假设您的数组名称是 array,并且您想更改数组第二个对象的键。 并且您想从“22”更改为“40”。
const objToChange = R.find(R.propEq('key', 22 ))(array); // To find the object you like to change.
objToChange.key = 40; // Change your desired field.
R.update(R.findIndex(R.propEq('key', 22))(array), objToChange,
patients); // And update the array with the new changed object.
或者只使用 findIndex ...
const index = R.findIndex(R.propEq('key', 22))(patients);
array[index].key = 40;