2011-12-01 146 views
0

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

所有成员对象都存储在一个数组中,下面的代码我循环这个数组,并在另一个数组中添加成员的名字,姓氏和电话号码,我正在循环。

首先,由于某种原因,我在控制台中收到以下错误消息(“Uncaught TypeError:Object 0 ha没有方法“匹配”)。第二件事是我没有弄明白如何(如果我找到了这个工作,并且如果我正在寻找匹配项),我可以将搜索结果引用到成员数组中的成员。我希望你明白我的意思,我很感谢任何帮助。

是的,如果你有更好的搜索方式的提示,我当然会很高兴。

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!"); 
      } 
     } 
    } 
} 

回答

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/

+0

就像一个魅力,谢谢! – holyredbeard

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

不一定是最好的解决办法,但你可以使用

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; 
    } 
} 
相关问题