0

2 つの項目 (name=string と location=json) を検索したい。この検索は (1 つの入力ボックスと検索用の 2 つの列) です。現時点では、このコードで「名前」を見つけることができますが、場所も見つける必要があります。

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 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;
   }
}

このコードは Object プロトタイプを変更し、すべてのオブジェクトに「検索」機能を追加することに注意してください(これは、同じことをしたい他のライブラリと競合する可能性があります)。

于 2012-07-04T09:41:42.697 に答える