我想搜索两个项目(name = string和location = json)。这个搜索是(一个输入框和两个用于搜索的列)。 目前这个代码我可以找到'名字',但我需要找到位置。
if(textToCheck !== '') {
if((searchArray[i]['location']).toLowerCase().search(textToCheck) === -1) {
display = false;
}
}
我建议但不起作用的代码是:
if(textToCheck !== '') {
if((searchArray[i]['name']).toLowerCase().search(textToCheck) === -1 || (searchArray[i]['location']).toLowerCase().search(textToCheck) === -1) {
display = false;
}
}
错误是:
Uncaught TypeError:Object 123 Street,xxx,xx,Canada,123rd Street,xxx,xx,123 xxx,12345 xxx,France没有方法'toLowerCase'FilterController.showFilteredSet(匿名函数)
答案 0 :(得分:0)
正如您所说location=json
,实际上searchArray[i]['location']
是一个对象而不是字符串。您需要根据对象的内容进行搜索。
或者只是将对象更改为字符串格式,如下所示:
JSON.stringify(searchArray[i]['location']).toLowerCase().search(textToCheck) === -1
答案 1 :(得分:0)
JSON.stringify()没问题。但是也会在对象键中搜索。
这意味着:
如果您的“JSON”对象如下所示:
({
street: 'my street',
country: 'Texas'
})
即使“数据”不包含结果, JSON.stringify(obj).toLowerCase().search('country')
也会找到结果。
代替:
使用通用方法对对象进行平面搜索。
Object.prototype.search = function(subject) {
for(var k in this) {
if(this.hasOwnProperty(k) && this[k].toString().toLowerCase().search(subject) !== -1)
return true;
}
return false;
};
var myObj = ({ foo: 'bar', hello: 'world' });
console.log(myObj.search('ar')); //search for "ar", returns true
console.log(myObj.search('ponyo!')); //search for "ponyo!", returns false
console.log(myObj.search('hello')); //search for "hello", returns false
在你的情况下会拒绝:
//somewhere above, run this only once:
Object.prototype.search = function(subject) {
for(var k in this) {
if(this[k].toString().toLowerCase().search(subject) !== -1)
return true;
}
return false;
};
/////
if(textToCheck !== '') {
if((searchArray[i]['name']).toLowerCase().search(textToCheck) === -1 &&
(searchArray[i]['location']).search(textToCheck) === false) {
display = false;
}
}
请注意,此代码修改了对象原型,为所有对象添加了“搜索”功能(这可能与其他库有冲突,您可能会也可能不会使用,想要这样做相同)。