Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Фильтр по начальным буквам слова (https://javascript.ru/forum/misc/54473-filtr-po-nachalnym-bukvam-slova.html)

nerv_ 21.03.2015 23:37

Цитата:

Сообщение от Shasoft
Добавил и ваш вариант. Он не находит вариант "Грач,ВорОна,Сорока" если ввести маску "в".

это решается просто

А вот это как решить? :)

кроме того
this.test = function(text) {
    return text
        .toLowerCase()
        .split(/[\s,]+/)
        .some(function(word) {
            return word.slice(0, n.length) === n;
        });
};

(не проверял)

Shasoft 22.03.2015 10:03

nerv_,
уговорили. Ваш вариант лучше, так как в моей если в строке есть управляющие символы типа '(', то фигня получается. Т.е. нужно экранировать их. Так что перешел на ваш вариант.

рони 22.03.2015 10:47

:write:
так и не понял что быстрее :)
var phrase = ['Есть массив фраз','Грач,ВорОна,Сорока','Вася(Крюков)'], word = ['в'];
   function oneINother(word,phrase) {
    function c(d) {
        return word.some(function(a) {
           // return (new RegExp("^" + a, "i")).test(d)
            return d.toLowerCase().slice(0, a.length) === a.toLowerCase();
        })
    }
    return phrase.filter(function(a) {
        return a.split(/[\s,.]+/).some(c)
    })
};
console.time('test');
oneINother(word,phrase);
console.timeEnd('test');
alert(oneINother(word,phrase));
   function oneINother2(word,phrase) {
    function c(d) {
        return word.some(function(a) {
            return (new RegExp("^" + a, "i")).test(d)
           // return d.toLowerCase().slice(0, a.length) === a.toLowerCase();
        })
    }
    return phrase.filter(function(a) {
        return a.split(/[\s,.]+/).some(c)
    })
};
console.time('test2');
oneINother2(word,phrase);
console.timeEnd('test2');
alert(oneINother2(word,phrase));

Shasoft 22.03.2015 11:20

На 3-х фразах смысла нет тестировать. Нужно побольше вариантов.
А пример вообще показывает противоположные значения при нескольких запусках. :)


Часовой пояс GMT +3, время: 18:26.