搜索数组并返回结果的最佳方法

时间:2011-12-01 21:41:44

标签: javascript arrays search for-loop

我有一个应用程序,您可以在其中添加人名,姓氏和电话号码(例如“新成员('​​Thomas','Jonsson','0709454543'”)。在应用程序中,可以在网络上显示成员页面,但现在我也希望能够搜索名字,姓氏或电话号码的成员。

所有成员对象都存储在一个数组中,在下面的代码中我循环遍历这个数组,并将成员firstname,lastname和phonenumber添加到另一个数组中,我正在循环。

首先,由于某种原因,我在控制台中收到以下错误消息(“未捕获的TypeError:对象0没有方法'匹配”)。第二件事是我没有弄清楚如何(如果我得到这个工作并获得匹配,如果我正在搜索)我可以将搜索结果引用到成员数组中的成员。我希望你理解我的意思,我很感谢你的帮助。

是的,如果您有更好的搜索方式,我当然会非常高兴。

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 个答案:

答案 0 :(得分:1)

您不需要创建搜索数组,您可以按如下方式遍历原始数组:

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]);
            }
        }
    }
}

答案 1 :(得分:1)

不一定是最佳解决方案,但您可以使用

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;
    }
}

答案 2 :(得分:1)

您的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/