2013-11-02 41 views
-1

获取满足JavaScript条件的数组中的第一个元素的高阶方式?获取数组中满足条件的第一个元素的高阶方法?

假设我有这些元素的数组:[1, 2, 3, 0, 3];

而我想获得大于2的第一个元素。

你如何使用高阶函数来实现这一点?

越紧凑越好。

如果我能做到这一点的哈斯克尔,我会做:

head $ filter condition array 
for example: 
head $filter (> 2) [1, 2, 3, 0, 3] 
+3

你有什么试过?你有什么问题阻止你自己解决这个问题? –

+0

@ 32bitkid我补充说我会用另一种语言来做。问题是我对JavaScript很陌生,甚至不知道从哪里开始。 –

+0

@Joren嗯,我问了一些有点不同,指定我想要的东西,用户HOF。 –

回答

2

像这样(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]); 

Documentation

+0

“short is better”:'[1,2,3,0,3] .filter(function(e){return e> 2;})[0]' –

+0

坏主意,找到第一个后会继续匹配元素,OP中的示例代码将会短路(不会查看数组的其他元素)。 – 2013-11-02 21:48:36

1

下划线是一个JavaScript函数库,它包含有用的实用函数,并包含一个名为find的函数,它将完全按照您的要求进行操作。

http://underscorejs.org/#find

,所以你可以写var x = _.find([1,2,3,0,3], function(v) { return v >= 2; });

+0

我喜欢这个更紧凑,但我不能选择这个作为答案,因为它不是纯粹的JavaScript。 –

+0

@LayGonzález嗯,它是纯粹的JavaScript。就像其他像jQuery这样的框架是纯粹的javascript。你不能让JavaScript评估代码是不是有效的JavaScript语法!但是,我会说,这是不是“最短”的答案,因为你添加一个完整的框架,以便做到这一点.. –

+0

@CrayonViolent你是对的。 –

0

您可以使用一些方法排列法迭代数组,直到满足条件(然后停止)。不幸的是,它只会返回一次是否满足条件,而不是由哪个元素(或者以什么指数)满足。

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; 
} 
相关问题