2013-11-02 40 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; 
} 
相關問題