获取满足JavaScript条件的数组中的第一个元素的高阶方式?获取数组中满足条件的第一个元素的高阶方法?
假设我有这些元素的数组:[1, 2, 3, 0, 3]
;
而我想获得大于2
的第一个元素。
你如何使用高阶函数来实现这一点?
越紧凑越好。
如果我能做到这一点的哈斯克尔,我会做:
head $ filter condition array
for example:
head $filter (> 2) [1, 2, 3, 0, 3]
获取满足JavaScript条件的数组中的第一个元素的高阶方式?获取数组中满足条件的第一个元素的高阶方法?
假设我有这些元素的数组:[1, 2, 3, 0, 3]
;
而我想获得大于2
的第一个元素。
你如何使用高阶函数来实现这一点?
越紧凑越好。
如果我能做到这一点的哈斯克尔,我会做:
head $ filter condition array
for example:
head $filter (> 2) [1, 2, 3, 0, 3]
像这样(Fiddle):
function isBigEnough(element) {
return element >= 2;
}
alert([1, 2, 3, 0, 3].filter(isBigEnough)[0]);
或使用匿名函数像在评论中提到的一小段路( Fiddle):
alert([1,2,3,0,3].filter(function(e){return e>=2;})[0]);
“short is better”:'[1,2,3,0,3] .filter(function(e){return e> 2;})[0]' –
坏主意,找到第一个后会继续匹配元素,OP中的示例代码将会短路(不会查看数组的其他元素)。 – 2013-11-02 21:48:36
下划线是一个JavaScript函数库,它包含有用的实用函数,并包含一个名为find的函数,它将完全按照您的要求进行操作。
,所以你可以写var x = _.find([1,2,3,0,3], function(v) { return v >= 2; });
我喜欢这个更紧凑,但我不能选择这个作为答案,因为它不是纯粹的JavaScript。 –
@LayGonzález嗯,它是纯粹的JavaScript。就像其他像jQuery这样的框架是纯粹的javascript。你不能让JavaScript评估代码是不是有效的JavaScript语法!但是,我会说,这是不是“最短”的答案,因为你添加一个完整的框架,以便做到这一点.. –
@CrayonViolent你是对的。 –
您可以使用一些方法排列法迭代数组,直到满足条件(然后停止)。不幸的是,它只会返回一次是否满足条件,而不是由哪个元素(或者以什么指数)满足。
function find(arr, test, ctx) {
var result = null;
arr.some(function(el, i) {
return test.call(ctx, el, i, arr) ? (result = el), true : false;
});
return result;
}
你有什么试过?你有什么问题阻止你自己解决这个问题? –
@ 32bitkid我补充说我会用另一种语言来做。问题是我对JavaScript很陌生,甚至不知道从哪里开始。 –
@Joren嗯,我问了一些有点不同,指定我想要的东西,用户HOF。 –