Monday, June 1, 2009

Проверка вхождения строки или числа в массив в стиле Python

В Python есть очень приятная возможность проверить вхождение объекта в список. Выглядит это примерно вот так:

if 'a' in ['a','b','c']:
    print "YES"
else:
    print "NO"


Согласитесь, просто и красиво. А вот в JavaScript нет такой штуки. И я решил написать для себя небольшое расширение объектов Number и String для JavaScript которое позволяет делать проверку похожим способом.Традиционно надо пройтись по всем элементам массива и сравнить с исходным значением и завернуть в функцию.

// определим функцию
function in(looking_for, list){
    for(i in list){
        if(looking_for == list[i]){
            return true;
        }
    }
    return false;
}

// тестим
if(in('1', ['1','2','3']){
    alert('yes');
}else{
    alert('no');
}


А можно по современному расширить объект и добавить соответствующий метод. Я сделал это так.

String.prototype.in=function(list){
    for(i in list){
        if(this==list[i]){
            return true;
        }
    }
    return false;
};
Number.prototype.in=String.prototype.in;


Теперь проверить вхождение числа или строки можно совсем просто

if('2'.in(['23','2'])){
    alert('yes');
}else{
    alert('no');
}
if((23).in([23,22])){
    alert('yes');
}else{
    alert('no');
}


Update: Опа. Оказывается Safari ругается на этот код, ему не нравится метод под названием in. Изменив in на inList например работает все отлично.
Happy coding!  Peace!

0 comments:

Post a Comment