2015-02-23 132 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