2015-02-23 109 views
-1

這個函數總是返回null ...js函數總是返回null

function find1(arry, uid){ 
    arry.forEach(function(obj){ 
     if(obj.uid === uid){ 
      return obj; 
     } 
    }); 
    return null; 
} 

但是當我將其更改爲下面的代碼,它的工作原理...

function find2(arry, uid){ 
    var dt; 
    arry.forEach(function(obj){ 
     if(obj.uid === uid){ 
      dt = obj; 
     } 
    }); 
    return dt; 
} 

var array = [ 
    {uid:"name01"}, 
    {uid:"name02"}, 
    {uid:"name04"}, 
    {uid:"name04"} 
]; 


console.log('find1', find1(array, 'name02')); // console output: find1 null 
console.log('find2', find2(array, 'name02')); // console output: find2 Object {uid: "name02"} 

我在做什麼錯find1

+1

你不和的返回值做什麼'forEach' – 2015-02-23 05:55:44

回答

3

在find1方法中您明確返回null。並且在forEach arry值上循環,它不會從find1方法返回,它會從數組中的所有值的內部forEach的匿名函數返回。

+0

是我不好,我以爲,這回將作爲回報''' find1''',忘記它在匿名函數中... – mido 2015-02-23 06:07:19

0

在第一個示例中,您返回的是內部函數的返回值,而不是函數'find1'。結果從內部函數返回到'find1'的主體。但'find1'不會返回這個結果。

要解決這個問題,只需要函數'find1'中的一個變量。像這樣:

var result = array.forEach(...); 
return result; 

或者說:

var result = null; 
arry.forEach(function(obj){ 
     if(obj.uid === uid){ 
      result = obj; 
     } 
    }); 
return result; 
+0

對不起,但''var result = array.forEach(...);'''結果將保存值'''undefined''' – mido 2015-02-23 06:08:08