2017-02-16 17 views
0

文字列が配列オブジェクトと同じかどうかをチェックして、テーブルフォームに送信するかどうかを確認したいが、編集ゾーンで何も変更しなかった場合は同じにすることができます。ユーザーがテーブルのフォームに記入して、サーバーに送信します。次回は、ユーザーがフォームを編集します。値がアレイの以前の情報を格納しているかどうかをチェックしたい場合はチェックしますが、何も変更せずに編集ゾーンに入る。問題は私のコードが同じ文字列がないことをチェックしているが、本当か偽の警告メッセージをポップアップするか、テーブルフォームのチェック中にすべてのメッセージをポップアップして "false"ステートメントに入るので、文字列をチェックした後に何も送ることができない。私はどんな助けもありがとう!forループで比較する文字列

var arr = [{words: a},{words: b},{words: c},{words: d}]; 
var val = $('#somethingFromHTML').val() 
    for(var i = 0; i < arr.length; i++) { 
     if (arr[i].words.indexOf(val) > -1){ 
      alert("duplicate words") 
      return false 
     } else if (arr[i].words.indexOf(val) === -1 || arr[i].words === val){ 
      alert("there's no duplicate words") 
      return true 
     } 
    } 

答えて

1

あなたのコードは常に唯一arr[0].wordsを確認した結果を返すあなたのifブロックの両方でreturn、および

を持って

  • ので:)、それは、全くarr[1].wordsに移行したことがありません

  • 第2のifの条件の一部は、最初の条件の逆数です。

valarr[0].wordsindexOfが返されます)の場合、コードはfalseを返します。それ以外の場合は、indexOfが-1を返し、2番目の条件が「」または「 ...」の場合は、trueが返されます。最初の部分が真実になるため、orの2番目の部分は無関係です。

最小限の変更はreturn true後のループ置くことです:

var arr = [{words: a},{words: b},{words: c},{words: d}]; 
var val = $('#somethingFromHTML').val(); 
for(var i = 0; i < arr.length; i++) { 
    if (arr[i].words.indexOf(val) > -1){ 
     alert("duplicate words"); 
     return false; 
    } 
} 
alert("there's no duplicate words"); 
return true; 

を...しかし、配列は、まさにこのような状況のための機能を持っている:Array.prototype.some

var arr = [{words: a},{words: b},{words: c},{words: d}]; 
var val = $('#somethingFromHTML').val(); 
if (arr.some(function(entry) { entry.words.indexOf(val) > -1})) { 
    alert("duplicate words"); 
    return false; 
} else { 
    alert("there's no duplicate words"); 
    return true; 
} 

some呼び出しをそのコールバックが真理値を返すまで、配列内のエントリを繰り返しコールバックします。コールバックがこれを実行する場合、sometrueを返します。真偽値を返すことのないコールバックを持つ配列の最後に達した場合は、falseを返します。したがって、配列内の項目が条件と一致するかどうかを確認するのに便利です。

+0

Thxたくさん、私は何かを見つけ出す! :) –