这是我的代码
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")
命令。
我需要检查用户提供的名称是否已存在。因此,我将名称
与每个文件/文件夹名称进行比较。问题是它找不到重复项。上述代码的结果如下图所示
最佳答案
return true
从 each
回调中返回。这对 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/