在 for 循环中比较字符串



我想在发送到表格表单之前检查数组对象的字符串是否相同,但是如果您没有在编辑区中更改任何内容,则可以相同。用户填写表格并将其发送到服务器,下次如果用户编辑表格我想检查值是否与数组相同(存储表中的先前信息),但如果用户没有更改任何东西只是进入编辑区。问题是我的代码检查没有相同的字符串,但它弹出了真或假警报消息,它在检查表格时弹出每条消息并进入"false"语句,所以我可以在检查字符串后发送任何东西。我将不胜感激任何帮助,谢谢!:)

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

您的代码始终返回仅检查arr[0].words的结果,它根本不会移动到arr[1].words,因为

  • 您在两个if块中都有一个return,并且

  • 您的第二个if条件部分是第一个条件的反面

因此,如果valarr[0].words中(indexOf返回> -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;如果它到达数组的末尾,而回调从未返回过 TRUTHY 值,则返回false。因此,它对于检查数组中的任何条目是否与条件匹配很有用。

相关内容

  • 没有找到相关文章

最新更新