gpt4 book ai didi

javascript - for循环中的字符串比较

转载 作者:行者123 更新时间:2023-12-03 04:59:56 24 4
gpt4 key购买 nike

我想在发送到表格表单之前检查字符串是否与数组对象相同,但如果您没有在编辑区域中更改任何内容,它可能是相同的。用户填写表格并将其发送到服务器,下次如果用户编辑表格,我想检查该值是否与数组(存储表格中的先前信息)相同,但如果用户不这样做也没关系'除了进入编辑区域之外,不要进行任何更改。问题是我的代码检查没有相同的字符串,但它弹出 true 或 false 警报消息,它在检查表格表单时弹出每条消息并进入“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 block 中都有一个 return,并且

  • 第二个 if 条件部分与第一个条件相反

因此,如果 val 位于 arr[0].words 中(indexOf 返回 > -1) ,代码将返回 false。否则,它将返回 true,因为根据定义,indexOf 返回 -1,而您的第二个条件是“如果它是 -1 or ... ”。 or 的第二部分无关紧要,因为第一部分为真。

最小的改变是将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;如果它到达数组末尾且回调从未返回 true 值,则返回 false。因此,它对于检查数组中的任何条目是否符合条件很有用。

关于javascript - for循环中的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42272245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com