2011-12-01 105 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; 
    } 
} 
相關問題