2017-02-16 213 views
0

我想在發送到表格前檢查字符串是否與數組對象相同,但是如果您沒有更改編輯區域中的任何內容,它可以是相同的。用戶填寫表格並將其發送到服務器,下一次如果用戶編輯表格,我想檢查該值是否與數組(存儲表格中的先前信息)相同,但是如果用戶沒有註冊,不會改變任何內容,但會進入編輯區域。問題是我的代碼被檢查出沒有相同的字符串,但它會彈出true或false警報消息,它會在檢查表格時彈出每條消息並進入「false」語句,因此在檢查字符串後我什麼都不能發送。我會感謝任何幫助,thx! :)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的結果,它永遠不會移動到arr[1].words可言,因爲

  • 你必須在這兩個你if塊的return,並

  • 您的第二個if條件部分是第一個的倒數

因此,如果valarr[0].wordsindexOf返回> -1),代碼將返回false。否則,它將返回true,因爲根據定義,indexOf返回-1,第二個條件是「如果它是-1 ...」。第二部分或無關緊要,因爲第一部分將是真實的。

的最小變化是把後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調用它重複回調數組中的條目,直到回調函數返回真值。如果回調曾經這樣做,some返回true;如果到達數組末尾並且回調從未返回真值,則返回false。因此,檢查數組中的任何條目是否與條件匹配很有用。

+0

很多,我弄清楚了一些東西! :) –