javascript - 在 jQuery 中比较两个字符串不起作用

标签 javascript jquery

这是我的代码

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") 命令。

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

enter image description here

最佳答案

return trueeach 回调中返回。这对 each 没有影响(它只关心 return false),并且不会执行任何操作来设置 nameIsDuplicate 的返回值。

您想要在那里返回 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 就会停止。如果对回调的调用返回 true 值,则 some 的返回值为 true,否则为 false

关于javascript - 在 jQuery 中比较两个字符串不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42578820/

相关文章:

javascript - 通过 PayPal 保护电子书下载链接

javascript - 如何通过最接近的范围值查找对象名称?

javascript - IE7 中的 keydown EventListener

jquery - css jquery 菜单 - 切换幻灯片放映隐藏 div

javascript - 在事务中包装 sequelize ORM 测试

javascript - 结合 React、Redux 和 React-Router 时,正确的做法是什么?

javascript - 在 Javascript 中启用/禁用按钮单击处理程序

java - 创建 JSON 结构的逻辑解决方案

php - $.inArray 从 php 脚本传递字符串时出现问题

javascript - Datatable数据绑定(bind)使用knockoutjs