2016-06-08 131 views
-3

我有一个函数需要从数组中返回一个值。Javascript,如何从foreach函数返回值

function getValue(key) : value 

function getValue(key) { 
     var result = null; 
     $scope.config.forEach(function(element) { 
      if(element.app_key == "search_result_limit") 
      result = element.app_value; 
      break; 
     }); 
     return result; 
    } 

我想获得这个值,但发现未定义。

请帮忙。

+1

ES6'find'。 'return $ scope.config.find(o => o.app_key ==='search_result_limit')|| {};' – Tushar

+0

@Tushar该函数看起来应该返回null作为不匹配,而不是空对象(也只是'.app_value',而不是整个对象) – Alnitak

回答

1

你应该使用过滤器的方法:

$scope.config.filter(function(element) { 
      return element.app_key == "search_result_limit"; 
}); 

考虑到你的$scope.config是对象的数组...

+2

请注意,这将返回一个数组,而不是根据OP的要求来自数组的值。 – ste2425

+0

雅..我错过了那部分! :) –

1

现代JS有Array.prototype.find

function getValue(key) { 
    var obj = $scope.config.find(function(e) { 
     return e.app_key === key; 
    }); 
    return obj ? obj.app_value : null; 
} 

或ES6语法:

function getValue(key) { 
    var obj = $scope.config.find(e => e.app_key === key); 
    return obj ? obj.app_value : null; 
} 

如果你没有ES6,你就要去只使用一个简单的循环for更好:

function getValue(key) { 
    for (var a = $scope.config, i = 0, n = a.length; i < n; ++i) { 
     if (a[i].app_key === key) { 
      return a[i].app_value; 
     } 
    } 
    return null; 
} 
+0

现代JS也有箭头功能,这将使代码consice,如[我的评论](http://stackoverflow.com/questions/37699181/javascript-how-to-return-value-from-foreach-function# comment62873000_37699181) – Tushar

+0

@Tushar是的,如果你说的是“流血的边缘”现代。 – Alnitak

+0

['find' BS](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find#Browser_compatibility)&[Arrow Function BS](https://developer.mozilla) .org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Browser_compatibility)关闭我会说。 – Tushar

0

你需要将两个语句中if语句块中。 使用此代码,这可能工作: -

function getValue(key) : value 

function getValue(key) { 
     for (var a = $scope.config, i=0, n = a.length; i< n ; i++){ 
       if (a[i].app_key === key) { 
        return a[i].app_value; 
       } 
     } 
     return null; 
    } 
+3

你也不能''break' from forEach'。迭代将继续。 – ste2425

+0

@ ste2425已经做了一些改变...请仔细研究一下 – Ajay

0

使用此代码

function getValue(key) {  
    var result= $scope.config.filter(function(item) { 
     return item.app_key == key;   
    }); 
    return result.length>0?result[0].app_value:null;   
}