函数总是返回false

时间:2014-01-10 17:38:19

标签: javascript jquery

Javascript相当新,有人能告诉我为什么这个简单的数组循环/字符串比较函数总是返回false吗?它们都是字符串类型,数据是相同的,循环应该绝对返回true。可能的语法错误?还有一种更简单的方法来运行此检查。

function imageDuplicate(fileName)
{
    $.each(previewImagesArray, function(index)
    {
        if(previewImagesArray[index].name == fileName)
            return true;
    });
    return false
}

提前致谢。

5 个答案:

答案 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) {
            ...
        }
    });