0

我想搜索两个项目(名称=字符串和位置=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;
            }
        }   

错误是:

未捕获的类型错误:对象 123 Street,xxx,xx,Canada,123rd Street,xxx,xx,123 xxx,12345 xxx,France has no method 'toLowerCase' FilterController.showFilteredSet(匿名函数)

4

2 回答 2

0

正如你所说location=json,实际上searchArray[i]['location']是一个对象而不是字符串。您需要根据对象的喜好进行搜索。

或者简单地将对象更改为字符串格式,如下所示:

JSON.stringify(searchArray[i]['location']).toLowerCase().search(textToCheck) === -1
于 2012-07-04T09:24:14.763 回答
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;
   }
}

请注意,此代码修改了对象原型,为所有对象添加了“搜索”功能(这可能与其他库冲突,您可能正在使用,也可能不使用,想要做同样的事情)。

于 2012-07-04T09:41:42.697 回答