Javascript 是否可以更改项目内的属性并返回项目本身?

Javascript 是否可以更改项目内的属性并返回项目本身?,javascript,ramda.js,Javascript,Ramda.js,我的应用程序上有这样的代码 var name='TesT'; var nameLowercase=name&&name.toLowerCase(), namesToTest=['asd','asd1','TesT']; var findCorrectName=R.pipe( R.map(R.toLower), R.any(R.equals(名称小写)) ); var hasFoundName=findCorrectName(namesToTest); 返回hasFoundName; 但是,现在

我的应用程序上有这样的代码

var name='TesT';
var nameLowercase=name&&name.toLowerCase(),
namesToTest=['asd','asd1','TesT'];
var findCorrectName=R.pipe(
R.map(R.toLower),
R.any(R.equals(名称小写))
);
var hasFoundName=findCorrectName(namesToTest);
返回hasFoundName;
但是,现在我需要在对象列表中进行搜索,并且属性“name”必须设置为小写。当找到与我的搜索匹配的对象时,我需要获取它

我已经阅读了文档,但找不到解决方案

var name='TesT';
var nameLowercase=name&&name.toLowercase(),
namesToTest=[{name:'asd',otherProperties…},
{name:'asd1',otherProperties…},
{name:'TesT',otherProperties…}];
var findByCorrectName=R.pipe(
R.map(
R.管道(R.支柱(‘名称’),R.托洛),
R.find(R.propEq('name',name小写))
);
var foundObject=findByCorrectName(namesToTest);
返回对象;
我找到了,这正是我需要的

var name='TesT',
nameLowercase=name&&name.toLowerCase(),
namesToTest=[{name:'asd'},
{name:'asd1'},
{name:'TesT'}];
var findByCorrectName=R.pipe(
R.map(R.over(R.lensProp('name'),R.toLower)),
R.find(R.propEq('name',name小写))
);
var hasFoundName=findByCorrectName(namesToTest);
返回hasFoundName;

我觉得这是解决您问题的简单方法:

const items = [{name : 'asd', x: 1}, {name : 'asd1', x: 2}, {name : 'TesT', x: 3}];

const byNameCi = curry((name, items) => find(
  where({name: pipe(toLower, equals(toLower(name)))}),
  items,
));

byNameCi('TEST', items); //=> {name: "TesT", x: 3}
您的用例可能不需要使用
curry
,但它也允许:

const findAsd = byNameCi('Asd');
// later
findAsd(items); //=> {name: "asd", x: 1}
请注意,这将返回原始值,而不进行toLowerCase转换。如果您希望返回具有转换名称的名称,那么我可能会对其进行如下更改:

const byTransformedNameCi = curry((name, items) => find(
  where({name: pipe(toLower, equals(toLower(name)))}),
  map(evolve({name: toLower}), items),
));

byTransformedNameCi('TEST', items); //=> {name: "test", x: 3}
或者,就像你说的,用和代替

虽然这些要点可能是免费的,但它们已经相当可读,所以我看不出有什么好的理由在上面花费任何精力

您可以在上看到这些方法



您在标题中询问了有关转换属性和返回对象的问题。拉姆达实际上不会改变你的数据;如果你正在寻找,拉姆达不是适合你的图书馆。但它将返回一个新对象,并转换该属性,它有许多函数以各种方式执行此操作,包括我们已经提到的、和其他函数。

我可以假定您的意思是
R.find(R.propEq('name',nameLowercase))
?如果没有
'name'
参数,这将不起作用。@ScottSauyet你是对的。。我没有把“名字”作为论点。。谢谢,我现在修正了我的答案多棒的答案!非常感谢。我想我现在更了解这个图书馆了。当然,我需要继续学习,但你的回答对我帮助很大