我有一个这样的函数可以工作,但我在返回之前处理整个数组:
function getDefault(name, preferences){
console.log("Getting " + name);
var v;
angular.forEach(preferences, function(value, key){
console.log("Checking " + value.name);
if(value.name == name){
v = value.value;
console.log("Got match, value = " + v);
}
});
console.log("v is " + v);
return v;
}
当我这样做时(从forEach
块内返回,我得到了未定义,但它表示返回了正确的值。
function getDefault(name, preferences){
console.log("Getting " + name);
var v;
angular.forEach(preferences, function(value, key){
console.log("Checking " + value.name);
if(value.name == name){
v = value.value;
console.log("Got match, value = " + v);
console.log("v is " + v);
return v; // The function returns but the value is undefined
}
});
}
取值 这里的交易是什么?角度是否会以某种方式创造一个消失的奇怪范围?
答案 0 :(得分:1)
preferences.every(function(preference,index){
if (preference.value===name){
v = preference.value;
return false;
}
else return true;
});
return v
答案 1 :(得分:0)
在您的第二个示例getDefault
中返回undefined
,因为当您没有return
语句时,这是JavaScript中的默认行为。
如果将嵌套函数分离为命名函数,这将更加明显:
function innerFunction(value, key){
console.log("Checking " + value.name);
if(value.name == name){
v = value.value;
console.log("Got match, value = " + v);
console.log("v is " + v);
return v; // The function returns but the value is undefined
}
}
function getDefault(name, preferences){
console.log("Getting " + name);
var v;
angular.forEach(preferences, innerFunction);
//getDefault does not return anything
}
顺便提一下,两个版本的代码都将处理整个数组。为了避免这种情况,你需要使用另一种foreach;也许只是原生的JavaScript。
答案 2 :(得分:-1)
似乎他正在发生,因为你在forEach上下文中返回一个值,所以它返回了一些东西,但是foreach忽略了它,因为它没有返回任何东西(即var return = angular.forEach...
对{forEach
没有意义1}})。因此,函数返回undefined(您没有返回函数)。
似乎你无法打破forEach
循环而不是使用它,你可以使用普通的for
并在找到你想要的值时将其中断。
for (key in preferences) {
if(preferences[key].name == name){
v = preferences[key].value;
break;
}
}