2014-01-10 525 views
0

Javascript是相當新的,有沒有人可以告訴我爲什麼這個簡單的數組循環/字符串比較函數總是返回false?它們都是字符串類型,數據是相同的,循環應該絕對返回true。可能的語法錯誤?還有一個更簡單的方法來運行此檢查。函數總是返回false

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

在此先感謝。

+0

這將是更快,更少的代碼,如果你只使用一個'for'聲明。對於(var i = 0,a = previewImagesArray; i

回答

10

您是從匿名內部功能從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 
} 
+0

嘿,謝謝哥們。 – Spark

+0

@Spark:如果這個答案解決了你的問題,請「接受」它作爲正確的答案。 – leticia

+0

接受答案有15分鐘計時器。 – Spark

8

這個怎麼樣,而不是:

function imageDuplicate(fileName) 
{ 
    return previewImagesArray.some(function(item) 
    { 
     return item.name === fileName; 
    }); 
} 

重要:這將工作在IE9 +,如果你需要這個在舊版本的IE中運行,請按照填充說明here

其它後樣品:

javascript find an object with specific properties in an array

+0

從我的POV,它應該給你更好的表現 – Dalorzo

+4

爲+1很少使用的'some'。 – Andy

0

內部function(index)該代碼是一個單獨的函數,嵌套在imageDuplicate。該函數的返回值將按照它認爲合適的方式由.each()進行處理。

因此,從您的外部函數返回的唯一聲明是您的return false

由於其他答案在代碼中進行了說明,因此您可以在imageDuplicate的範圍內聲明一個變量,並獲取內部函數並修改該值以獲得所需的效果。

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; 
} 
0

一個好辦法是使用值直接

$.each(previewImagesArray, function (index, value) { 
     if (value.name == fileName) { 
      ... 
     } 
    });