for循环中的字符串比较

时间:2017-02-16 11:10:10

标签: javascript jquery string compare

我想在发送到表格之前检查数组对象中的字符串是否相同,但如果您没有更改编辑区域中的任何内容,则它可以是相同的。用户填写表格并将其发送到服务器,下次如果用户编辑表格我想检查该值是否与数组相同(存储表格中的先前信息),但它没问题如果用户没有改变任何东西,只能进入编辑区。问题是我的代码检查了没有相同的字符串,但它弹出了真或假警告消息,它在检查表格时弹出每条消息并进入" 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
        }
    }

1 个答案:

答案 0 :(得分:1)

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

  • 您的return个版块中都有if

  • 您的第二个if条件部分是第一个条件的倒数

因此,如果val位于arr[0].wordsindexOf返回> -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。因此,检查数组中的任何条目是否与条件匹配非常有用。