/ / String im Vergleich für for-Schleife - Javascript, jquery, string, vergleichen

String, der in for-Schleife vergleicht - javascript, jquery, string, vergleichen

Ich möchte überprüfen, ob die Zeichenfolge in einem Array identisch istObjekt oder nicht vor dem Senden an eine Tabelle Formular, aber es kann das gleiche sein, wenn Sie nichts in der Bearbeitungszone ändern. Benutzer füllen Sie die Tabelle Formular und senden Sie es an den Server, das nächste Mal, wenn Benutzer das Formular bearbeiten, das ich will um zu überprüfen, ob der Wert derselbe ist wie das Array (welche die vorherigen Informationen aus der Tabelle speichert), aber es ist in Ordnung, wenn der Benutzer nichts geändert hat, sondern in die Editierzone gegangen ist. Das Problem ist, dass mein Code überprüft hat keine gleiche Zeichenfolge, aber es Popup entweder die wahre oder die falsche Warnmeldung, es Popup jede Nachricht beim Überprüfen der Tabelle Formular und gehen Sie in die "false" -Anweisung, so kann ich nichts nach dem Überprüfen Zeichenfolge senden. Ich werde jede Hilfe zu schätzen wissen, thx! :)

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

Antworten:

1 für die Antwort № 1

Ihr Code gibt immer nur das Ergebnis der Überprüfung zurück arr[0].wordsgeht es nie weiter arr[1].words überhaupt, weil

  • Du hast ein return in beiden von dir if Blöcke und

  • Deine Sekunde if Bedingung ist zum Teil die Umkehrung der ersten

Folglich, wenn val ist in arr[0].words (indexOf kehrt zurück > -1), wird der Code zurückgeben false. Andernfalls wird es zurückkehren trueweil per definitionem indexOf gab -1 zurück und Ihre zweite Bedingung ist "wenn es -1 ist" oder ... ". Der zweite Teil der oder ist irrelevant, weil der erste Teil wahr sein wird.

Die minimale Änderung besteht darin, die return true nach die Schleife:

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;

... aber Arrays haben nur für diese Situation eine Funktion: 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 ruft seinen Rückruf wiederholt mit den Einträgen im Array in der angegebenen Reihenfolge auf, bis der Callback einen truthigen Wert zurückgibt. Wenn der Rückruf das macht, some kehrt zurück true; Wenn es das Ende des Arrays erreicht, ohne dass der Callback einen truthigen Wert zurückgegeben hat, kehrt es zurück false. Es ist also nützlich, um zu überprüfen, ob ein Eintrag im Array eine Bedingung erfüllt.