2015-06-24 3 views
0

Я ищу метод, сопоставимый с методом javascript Array.prototype.every, но в рубине. В javascript он выполняет итерацию по массиву и возвращает значение true, если каждый элемент вызывает обратный вызов для возврата true. Одна из приятных вещей об этом заключается в том, что она не беспокоит повторение всего массива, если один из элементов не прошел тест. Вместо этого он замыкает и возвращает false.Есть ли рубиновый эквивалент метода Array.prototype.every javascript?

function isBigEnough(element) { 
    return element >= 10; 
} 
[12, 5, 8, 130, 44].every(isBigEnough); //=> false 
[12, 54, 18, 130, 44].every(isBigEnough); //=> true 

Я знаю, что я мог бы получить подобный эффект с более низкими итераторами уровня, как петли while.

def isBigEnough(arr) 
    i = 0 
    result = true 
    while i < arr.length 
    if arr[i] >= 10 
     i++ 
    else 
     i = arr.length 
     result = false 
    end 
    end 
    return result 
end 
is_big_enough([12, 5, 8, 130, 44]) #=> false 
is_big_enough([12, 54, 18, 130, 44]) #=> true 

Но я решил, что у рубина есть что-то для этого. Кто-нибудь знает, как получить такой же эффект?

+0

Попробуйте метод ['all?'] (Http://ruby-doc.org/core-2.2.2/Enumerable.html#method-i-all-3F). – orde

+4

, если вы используете downvote, пожалуйста, оставьте комментарий, объясняющий почему – williamcodes

+0

Я не делал ни слова, но не должно быть так сложно понять, что кто-то может выбрать, чтобы ответить на вопрос, на который можно было ответить, просто просмотрев документацию или сделав быстрый Google поиск. –

ответ

3

Я хотел бы использовать all?.

my_array.all? { |element| element >= 10 } 

Вы передаете в block кода, который функционально эквивалентно переходу вашей функции в JavaScript.

0
is_big_enough = -> element { element >= 10 } 
[12, 5, 8, 130, 44].all?(&is_big_enough) # => false 
[12, 54, 18, 130, 44].all?(&is_big_enough) # => true 

Enumerable#all?[{ |obj| block } ]true или false

Проходит каждый элемент коллекции для данного блока. Метод возвращает true, если блок никогда не возвращает false или nil. Если блок не указан, Ruby добавляет неявный блок { |obj| obj }, который вызовет all?, чтобы вернуть true, когда ни один из членов коллекции не является false или nil.

%w[ant bear cat].all? { |word| word.length >= 3 } #=> true 
%w[ant bear cat].all? { |word| word.length >= 4 } #=> false 
[nil, true, 99].all?        #=> false 
Смежные вопросы