我有一个应用程序,您可以在其中添加人名,姓氏和电话号码(例如“新成员('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!");
}
}
}
}
答案 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