Лучший способ поиска по массиву и возврата результата - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть приложение, в которое можно добавить имя, фамилию и номер телефона народа (например, «новый участник (« Томас »,« Йонссон »,« 0709454543 »). В приложении можно отображать участников в Интернете.страницу, но теперь я также хочу иметь возможность искать члена с именем, фамилией или номером телефона.

Все объекты Member хранятся в массиве, и в коде ниже я перебираюэтот массив и добавляет члены имя, фамилию и номер телефона в другой массив, который я зацикливаюсь.

Прежде всего, по какой-то причине я получаю следующее сообщение об ошибке в консоли ("Uncaught TypeError: Object0 не имеет метода «match»). Во-вторых, я не знаю, как (если я получу это на работу и получу совпадение, если я ищу), я могу передать результат поиска члену вмассив элементов. Надеюсь, вы понимаете, о чем я, и я благодарен за любую помощь.

Да, и если у вас есть какие-либо советы по улучшению поиска, я бы, конечно,Очень счастлив.

function searchMember(searchWord){
        var searchArray = [];

        for (var i = 0; i < members.length; i++){
        var firstname = members[i].firstname;
        var lastname = members[i].lastname;
        var phonenr = members[i].phonenr;

        searchArray.push(firstname);
        searchArray.push(lastname);
        searchArray.push(phonenr);
        }

        for (var j = 0; j < searchArray.length; j++) {
            if (searchArray[j].match (searchWord)){
                alert("Found member!");
            }
        }
    }
}

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Не обязательно лучшее решение, но вы можете использовать

function searchMember(searchWord){
    var str;
    for(i = 0; i< this.length;i++){
        str = this[i].firstname + this[i].secondname + this[i].phonenr;
        if(str.match(searchWord)
            return true;
    }
}
1 голос
/ 02 декабря 2011

Ваш TypeError должен исходить из ваших фактических данных - действительно ли все является строкой?

Для поиска - вам не нужно делать две петли; Вы можете проверить это при повторении уже в первый раз. Чтобы получить результат, вы можете return член в функции. То, что возвращает функция, заменяется при вызове функции.

function searchMember(searchWord) {
    for (var i = 0; i < members.length; i++) {
        var firstname = members[i].firstname;
        var lastname  = members[i].lastname;
        var phonenr   = members[i].phonenr;

        if (firstname.match(searchWord)  // firstname matches
         || lastname.match(searchWord)   // or lastname matches
         || phonenr.match(searchWord)) { // or phonenr matches
            return members[i]; // if either of the three, return this member
        }
    }
}

Тогда вы можете сделать:

var someMember = searchMember("D"); // search for "D"

alert(someMember.phonenr); // alert phonenr of found member

http://jsfiddle.net/Fu7ED/

1 голос
/ 02 декабря 2011

Вам не нужно создавать поисковый массив, вы можете перебрать исходный массив следующим образом:

function searchMember(searchWord) {
    var props = ['firstname', 'lastname', 'phonenr'], j, prop;
    for (var i = 0; i < members.length; i++) {
        for (j = 0; j < props.length; j++) {
            prop = members[i][props[j]];
            if (prop.match && prop.match(searchWord)) {
                alert("Found at index " + i + " and object: " + members[i]);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...