Javascript相当新,有人能告诉我为什么这个简单的数组循环/字符串比较函数总是返回false吗?它们都是字符串类型,数据是相同的,循环应该绝对返回true。可能的语法错误?还有一种更简单的方法来运行此检查。
function imageDuplicate(fileName)
{
$.each(previewImagesArray, function(index)
{
if(previewImagesArray[index].name == fileName)
return true;
});
return false
}
提前致谢。
答案 0 :(得分:11)
您从匿名内部函数返回true,而不是从imageDuplicate
返回true,而是使用如下所示的标志变量
function imageDuplicate(fileName) {
var valid = false;
$.each(previewImagesArray, function (index) {
if (previewImagesArray[index].name == fileName) {
valid = true;
//to stop the iteration
return false
}
});
return valid
}
答案 1 :(得分:8)
相反如何:
function imageDuplicate(fileName)
{
return previewImagesArray.some(function(item)
{
return item.name === fileName;
});
}
重要提示:如果您需要在旧版本的IE中运行,请使用IE9 +,请按照填充说明here进行操作。
其他邮寄样本:
javascript find an object with specific properties in an array
答案 2 :(得分:1)
如评论中所述 从每个循环返回,不会从函数返回。
尝试这样的事情
function imageDuplicate(fileName)
{
var isDuplicate = false;
$.each(previewImagesArray, function(index)
{
if(previewImagesArray[index].name == fileName){
isDuplicate = true;
return false; //exit from each loop
}
});
return isDuplicate;
}
答案 3 :(得分:0)
function(index)
内的代码是一个单独的函数,嵌套在imageDuplicate
中。该函数的返回值将由.each()
按其认为合适的方式处理。
因此,从您的外部函数返回的唯一语句是return false
。
正如代码中说明的其他答案一样,您可以在imageDuplicate
的范围内声明一个变量,并让内部函数访问并修改该值,以获得您想要的效果。
答案 4 :(得分:0)
一个调整就是直接使用该值
$.each(previewImagesArray, function (index, value) {
if (value.name == fileName) {
...
}
});