javascript – Ramda:如何通过currying,过滤和映射来最小化计算资源?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Ramda:如何通过currying,过滤和映射来最小化计算资源?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1986字,纯文字阅读大概需要3分钟。
内容图文
我正在使用Ramda构建一个React应用程序.我还是功能编程的新手(约两个月).
我有一个这样的联系人列表:
const contacts = [
{
id: 1,
firstName: 'Sven',
lastName: 'Hillstedt',
city: 'Aachen',
company: '',
position: 'Student',
group: 'friends',
tendency: 'maintain'
},
{
id: 2,
firstName: 'David',
// ...
];
给定一个字符串我需要过滤这个(很长,10.000-100.000)列表.但我只需要考虑键firstName,lastName,city,company和position.有一个数组包含这些:
const FIRST_NAME = 'firstName';
const LAST_NAME = 'lastName';
const CITY = 'city';
const COMPANY = 'company';
const POSITION = 'position';
export const stringFields = [FIRST_NAME, LAST_NAME, CITY, COMPANY, POSITION];
现在,使用Ramda我编写了以下函数,它接受一个字符串和一个联系人列表,映射在contacts`键上,选择相关的并缩小它们,然后返回已过滤的联系人:
import { any, filter, includes, map, pick, pipe, toLower, values } from 'ramda';
const contactIncludesValue = value =>
pipe(
pick(stringFields),
map(toLower),
values,
any(includes(value))
);
const filterContactsByValue = value => filter(contactIncludesValue(value));
正如你所看到的,这段代码很混乱(甚至认为它比命令式更漂亮).我curry value =>很多次,感觉不太理想.我也在质疑,这段代码是否只对联系人进行一次迭代,是否有效.
你将如何过滤和映射(仅选择相关键lowerCase)一个大的联系人列表,而不是迭代两次或更多次?有没有办法避免我的currying并写下这个清洁工?
解决方法:
这里有几件事要回应.
>即使评论有点讽刺,@zerkms也是对的.尝试性能优化没有多大意义,除非您知道代码实际上具有较差的性能,特别是如果它使代码更难编写或维护.
>你没有咖喱价值=>多次.它只是预先计算,每次过滤列表时,您的值的部分应用会发生一次.
>您只能一次迭代您的联系人.但在每个人的内部都是对你的任何一个领域的调用.如果找到匹配,这个会提前返回,所以计算调用次数并不容易,但可能是O(m * n),其中m是字段数,n是联系人数.
此版本的代码稍微简洁一些.您可能会或可能不会发现它更具可读性:
const contactIncludesValue = value =>
pipe(
props(stringFields),
map(toLower),
any(includes(value))
);
const filterContactsByValue = pipe(contactIncludesValue, filter);
请注意道具比pick(…)更方便 – >值和中间映射(toLower)之后也能正常工作.
内容总结
以上是互联网集市为您收集整理的javascript – Ramda:如何通过currying,过滤和映射来最小化计算资源?全部内容,希望文章能够帮你解决javascript – Ramda:如何通过currying,过滤和映射来最小化计算资源?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。