繁体   English   中英

比较jQuery中的两个字符串不起作用

[英]Comparing two strings in jQuery doesn't work

这是我的代码

function nameIsDuplicate(name){
    objects = $("#content").find('p.itemOldName');
    $(objects).each(function(i, object){
        console.log("*"+($(object).text()).toLowerCase() + "*" + name.toLowerCase()+"*");
        if(($(object).text()).toLowerCase() == name.toLowerCase())
            return true;
    });
    return false;
}

我正在构建一个在线文件管理器系统。 name参数是用户通过文本框提供的名称, $(object).text()是当前目录中文件和文件夹的名称。 这些名称来自exec("ls")命令。

我需要检查用户提供的名称是否已经存在。 因此,我将name与每个文件/文件夹名称进行比较。 问题是它找不到重复项。 下图给出了以上代码的结果

在此处输入图片说明

return true返回each回调。 这对each都没有影响(它只关心return false ),并且不做任何事情来设置nameIsDuplicate的返回值。

您要在那里return false (无需继续查找)并设置一个标志,以便您的nameIsDuplicate可以返回它:

function nameIsDuplicate(name){
    var duplicate = false;
    objects = $("#content").find('p.itemOldName');
    $(objects).each(function(i, object){
        console.log("*"+($(object).text()).toLowerCase() + "*" + name.toLowerCase()+"*");
        if(($(object).text()).toLowerCase() == name.toLowerCase()) {
            duplicate = true;
            return false; // Stop looping
        }
    });
    return duplicate;
}

但是 ,使用Array.prototype.some可以使该函数简单得多:

function nameIsDuplicate(name){
    var objects = $("#content").find('p.itemOldName');
    name = name.toLowerCase();
    return objects.get().some(function(object) {
        return $(object).text().toLowerCase() === name;
    });
}

some调用数组的每个条目的回调。 如果回调返回错误的值,则some继续进行; 如果回调返回真实值,则some停止。 如果对回调的调用返回了真实值,则some的返回值是true否则返回false

您的函数不返回true ,因为你在each循环......应该是这样的:

function nameIsDuplicate(name){
    var same=0;
    objects = $("#content").find('p.itemOldName');
    $(objects).each(function(i, object){
        console.log("*"+($(object).text()).toLowerCase() + "*" + name.toLowerCase()+"*");
        if(($(object).text()).toLowerCase() == name.toLowerCase()){
            same=1; 
            return false;        
        }
    });
    if(same){
        return true;
    }else{
        return false;
    }
}

通过使回调函数返回false,可以在特定的迭代中破坏$ .each()循环。 返回非false与for循环中的continue语句相同; 它将立即跳至下一个迭代。

其他解决方案:

function nameIsDuplicate(name){
    return $("#content").find('p.itemOldName').filter(function(){return $(this).text().toLowerCase() === name.toLowerCase();}).length;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM