我想在发送到表格表单之前检查数组对象的字符串是否相同,但是如果您没有在编辑区中更改任何内容,则可以相同。用户填写表格并将其发送到服务器,下次如果用户编辑表格我想检查值是否与数组相同(存储表中的先前信息),但如果用户没有更改任何东西只是进入编辑区。问题是我的代码检查没有相同的字符串,但它弹出了真或假警报消息,它在检查表格时弹出每条消息并进入"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
条件部分是第一个条件的反面
因此,如果val
在arr[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
。因此,它对于检查数组中的任何条目是否与条件匹配很有用。