- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个过滤字符串数组的函数。第一个函数根据长度对其进行过滤,另一个函数根据它包含的字符进行过滤。
字符串数组在页面加载时加载。
如何使这个函数一起工作,所以当我根据数组包含的字符过滤数组并且我有适当的字符串时,稍后我应该按最小值,它应该向我显示数组中的剩余字符串上一个过滤器。我不想再次加载数组。
这里我有第一个函数http://jsfiddle.net/arunpjohny/03avr1vh/2/
如何添加其他并让它们一起工作。
我的脚本:
function filter() {
var a = document.getElementById('A').checked,
e = document.getElementById('E').checked,
o = document.getElementById('O').checked,
result2; //make a copy
result2 = animals.filter(function (value) {
value = value.toLowerCase();
return (!a || value.indexOf('a') == -1) && (!e || value.indexOf('e') == -1) && (!o || value.indexOf('o') == -1);
})
document.getElementById("demo").innerHTML = result2;
}
filter();
最佳答案
在为自己构建了一个小型 FP 库后,您可以以声明式方式编写过滤器
var animals = ["Bear", "Mouse", "Cat", "Tiger", "Lion"];
var letters = ["A", "E", "O"];
function showAnimals() {
var getSwitches = compose([
map(prop("value")),
filter(prop("checked")),
map(getElementById)
]);
var switches = getSwitches(letters);
var _filter = compose([
map(join("")),
filter(compose([
not,
any(flip(elem)(switches)),
map(toUpperCase)
])),
map(split(""))
]);
var result = _filter(animals);
getElementById("demo").innerHTML = join(", ")(result);
};
您的两个主要行动是:
每个读起来都像一个小故事:(注意反向阅读撰写 block )。
获取开关
字母
调用getElementById
值
开关
_过滤器
开关
匹配结果
好的,这就是我们使用的很多函数。我不会详细讨论每一个,但大多数 FP 库都会为您提供这些基础知识。我在 this post about function composition 中详细介绍了从头开始构建其中一些的细节。 .
Before we go further!
“性能好吗?”
是的,但是与什么相比呢?如果您编写一个 map
或 filter
lambda,您可能能够更快地处理相同的信息。
“那么这很慢吗?”
不,但只有你可以对此做出判断。它仍然会在不到一秒的时间内得出答案,所以对我来说已经足够快了。
“为什么这样更好?”
首先,它更具声明性。也就是说,我们告诉计算机我们想要什么,而不一定告诉它如何给我们答案。后者是一种更加命令式风格。
诸如设置变量、调用 for 循环等之类的事情正在告诉计算机如何完成其工作。命令式风格并不坏,只是当它变得过于冗长时可能会很糟糕。
请注意,我们可以通过定义两个变量来解决问题:switches
和 result
。其他一切都只是一个函数。
有关更多信息,我鼓励您阅读我上面链接的其他答案。
For those of you interested, here's the functions I used to make the above solution work
var id = function(x) {
return x;
};
var getElementById = function(x) {
return document.getElementById(x);
};
var neq = function(y) {
return function(x) {
return x !== y;
};
};
var not = function(x) { return !x; };
var prop = function(x) {
return function(elem) {
return elem[x];
};
};
var indexOf = function(y) {
return function(x) {
return x.indexOf(y);
};
};
var elem = function(y) {
return compose([neq(-1), indexOf(y)]);
};
var map = function(f) {
return function(xs) {
return xs.map(f);
};
};
var filter = function(f) {
return function(xs) {
return xs.filter(f);
};
};
var any = function(f) {
return function(xs) {
return xs.some(f);
}
};
var reduceRight = function(f) {
return function(i) {
return function(xs) {
return xs.reduceRight(uncurry(f), i);
};
};
};
var toUpperCase = function(s) {
return s.toUpperCase();
};
var split = function(y) {
return function(x) {
return x.split(y);
};
};
var join = function(y) {
return function(x) {
return x.join(y);
};
};
var flip = function(f) {
return function(y) {
return function(x) {
return f(x)(y);
};
};
};
var uncurry = function(f) {
return function(x, y) {
return f(x)(y);
};
};
var compose = flip(reduceRight(flip(id)));
这就是全部,伙计们!
关于javascript - 在 Javascript 中让一个函数与另一个函数配合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30202746/
自定义限流注解 先介绍一下 @Retention 和 @Target 这两个元注解 @Retention: 指定注解的生命周期(源码、class文件、运行时),其参考值见类的定义:java.lang.
在 Ubuntu 13.10 中使用 PyCharm Community Edition 和 IdeaVim 时,键盘经常停止接受输入,我必须重新启动 IDE。当我单击不同的文本区域时,光标仍然会移动
我正在开发一个Java项目,我试图让useDelimiter删除除“=”和“,”之间的文本之外的所有内容。例如,在文件的第一行我想保留“ThermostatNight”。 文本文件如下所示: E
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
目录 1、加入 remember-me 2、原理分析 自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱: 很多网站我们在登录的时
我是开发 Android 应用程序的菜鸟。我想问一下。我的 PreferenceActivity 如何希望在不返回 MainActivity 并再次转到 PreferenceActivity 的情况下
1. 前言 大家好,我是安果! 我们都知道 Python 可以用来开发桌面应用,一旦功能开发完成,最后打包的可执行文件体积大,并且使用 Python 开发桌面应用周期相对较长 假如想快速开
我正在为命令行应用程序编写一个非常简单的 GUI 工具。它只有 2 个按钮。 连接并退出。 在 applicationDidFinishLaunching 中,我运行以下命令 NSPipe *pipe
我也在 LibGDX forums 上发布了这个问题. 嘿那里!在我的论文中,我正在编写一个 DSL 来描述图片的外观。这些图片将由 libGDX 根据 DSL-Input 绘制。目前,jetbrai
准备 SpringBoot 工程 1.新建 SpringBoot 项目,默认的端口是 8080 ,新建 Controller 和 Mapping @RestControllerpublic cla
我有类似的问题 this one 以下是我使用的: CDH4.4(配置单元 0.10) protobuf-java-.2.4.1.jar elephant-bird-hive-4.6-SNAPSHOT
我想使用 angularjs 和 angular-ui(特别是 ui-select2 功能)实现对选择输入的读/写访问控制。 场景很简单:通过使用 ng-readonly 属性,我可以控制用户是否可以
我是一名优秀的程序员,十分优秀!