2013-11-02 11 views
-1

Более высокий способ получения первого элемента в массиве, который соответствует условию в Javascript?Способ более высокого порядка получения первого элемента в массиве, который удовлетворяет условию в Javascript?

Предположим, у меня есть массив с этими элементами: [1, 2, 3, 0, 3];

И я хочу получить первый элемент, который больше 2.

Как вы это делаете, используя функции более высокого порядка?

Более компактный, тем лучше.

Если бы я мог сделать это на Haskell, я хотел бы сделать:

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

«короче лучше»: '[1,2,3,0,3] .filter (функция (e) {return e> 2;}) [0]' –

+0

Плохая идея, это будет продолжаться после обнаружения первого соответствующий элемент, где пример кода в OP будет короткозамкнутым (не будет смотреть на другие элементы массива). –

1

underscore - это библиотека 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; 
} 
Смежные вопросы