我想在发送到表格之前检查数组对象中的字符串是否相同,但如果您没有更改编辑区域中的任何内容,则它可以是相同的。用户填写表格并将其发送到服务器,下次如果用户编辑表格我想检查该值是否与数组相同(存储表格中的先前信息),但它没问题如果用户没有改变任何东西,只能进入编辑区。问题是我的代码检查了没有相同的字符串,但它弹出了真或假警告消息,它在检查表格时弹出每条消息并进入" 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
}
}
答案 0 :(得分:1)
您的代码始终会返回仅检查arr[0].words
的结果,它永远不会转移到arr[1].words
,因为
您的return
个版块中都有if
个
您的第二个if
条件部分是第一个条件的倒数
因此,如果val
位于arr[0].words
(indexOf
返回> -1
),则代码将返回false
。否则,它将返回true
,因为根据定义,indexOf
返回-1,而您的第二个条件是&#34;如果它是-1 或 .. &#34 ;.第二部分是无关紧要的,因为第一部分是真的。
最小的变化是在循环之后放置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
按顺序使用数组中的条目重复调用其回调,直到回调返回truthy值。如果回调曾经这样做,some
会返回true
;如果它到达数组的末尾并且回调从未返回真值,则返回false
。因此,检查数组中的任何条目是否与条件匹配非常有用。