2011-11-02 8 views
0

配列を検索する際に、空白をどのように扱いますか?ユーザーが何も入力しない(つまり、単にEnterを押す)か、空白スペースに入力すると、検索でfalseが返されるとしますか?JSでindexOf()を使用すると、null値を否定するのは賢明でしょうか?

test_pages=[ 
"Lorem Ipsum is simply dummy text of the printing and typesetting industry." 
, 
"It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout", 
"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable." 
] 

var find=prompt("Enter a term"); 
find = find.toLowerCase(); 

for(i=0;i<test_pages.length;i++) 
    { 
     // normalisation 
     test_pages[i] = test_pages[i].toLowerCase(); 

     // use indexOf() to find the occurrences of pattern 
     if(test_pages[i].indexOf(find)>=0) 
     { 
      alert("true"); 
      break; 
     } 
     else if(test_pages[i].indexOf(find)<0) 
     { 
      alert("false"); 
     }  
    } 
+2

あなたは '他if'を必要としません:'場合indexOf'が0以上でない場合、0未満であることが保証されます。 – Eric

答えて

1

入力を検証し、ユーザーが実際に何かを入力するように要求してください。それが不可能な場合は、いずれの応答も論理的であり、とは異なります。は、ユーザーエクスペリエンスに影響します。

1

これは設計が必要です。私はここに「正しい」または「間違った」答えがあるとは思わない。しかし、あなたは、あなたが問題になっている場合のために提供したコードの分析を支援するために、あなたが考慮する必要があります。空白のままにするとき

"hello".indexOf("h")  => 0 
"hello".indexOf("")  => 0 
"hello".indexOf(undefined) => -1 
"hello".indexOf(null)  => -1 

はまたprompt戻ってその空の文字列を考えます。あなたのコードが立っているので、ユーザーが何も入力しなければ、あなたのコードはtrueに警告します。

1

あなたのロジックは現在間違っています。検索語が2番目のテキストである場合、それはあなたが空白の検索からユーザーを防ぐためにしたい場合は、アップフロント入力を検証、まあ

var test_pages = [ 
    "Lorem Ipsum is simply dummy text of the printing and typesetting industry.", 
    "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout", 
    "There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable." 
] 

var find = prompt("Enter a term").toLowerCase(); 

if(find) { 
    var found = false; 
    for(i = 0; i < test_pages.length; i++) {   
     // use indexOf() to find the occurrences of pattern 
     if(test_pages[i].toLowerCase().indexOf(find) >= 0) { 
      found = true; 
      break; 
     } 
    } 
    alert(found ? "true" : "false"); 
} 
else { 
    alert("I can't search for that!"); 
} 
1

「偽」し、「真の」警告が表示されます。

"Genie in the Magic Lamp"アプローチを採用し、結果が少しばかげても人々に文字通り尋ねるようにしたい場合は、ユーザーがスペース文字と文字列を検索するとtrueを返します1つ持っている。

あなたはアルゴリズムが静かに空白を無視したい場合は、あなたが代わりにこのような何かを実装することができます:

test_pages=[ 
"Lorem Ipsum is simply dummy text of the printing and typesetting industry." 
, 
"It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout", 
"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable." 
] 

var find=prompt("Enter a term"); 
find = find.toLowerCase(); 

// The jQuery operations could be re-written using vanilla JavaScript, 
// if you don't have jQuery available for some reason. 
$.each(test_pages, function(index, value) { 
    token_array = value.split(" "); 
    normalized_array = new Array(); 
    $.each(token_array, function(index, token) { 
     normalized_array.push(token.toLowerCase()); 
    }); 

    if($.inArray(find, normalized_array) { 
     alert("true"); 
     break; 
    } else { 
     alert("false"); 
    }  
}); 

このアプローチを、配列に文字列トークンを入れた後、配列を確認し、あなたが提供します無料であなたが探しているかもしれない "フィルタリング"。空文字列、空白などの値はトークン配列に配置されませんので、静かに見つからないでしょう。

偽/真偽の結果のみを返す場合は、現在の実装をそのままにして、indexOf関数を使用する前に空白を取り除くこともできます。

1

は、私はそれはあなたが検索方法をジャンプして返すことができない場合は、あなただけのトリム(入力メッセージ)が空である場合に判断することができると思う偽

var test_pages = [ 
    "Lorem Ipsum is simply dummy text of the printing and typesetting industry.", 
    "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout", 
    "There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable." 
] 

var find = prompt("Enter a term").toLowerCase(), 
    Search = function(str){ 
     if(str && str.trim() != "") { 
      for(i = 0; i < test_pages.length; i++) {   
       if(test_pages[i].toLowerCase().indexOf(str) > -1) { 
        return true; 
       } 
      } 
     } 
     return false; 
    }; 
Search(find) ? alert("search it") : alert ("no search"); 
関連する問題