在数组中查找值,然后使用Angular forEach返回true

Kim*_*Man 14 javascript foreach angularjs

我正在学习JavaScript和AngularJS.

这段代码有什么区别?

function isInArrayNgForeach(field, arr) {
    angular.forEach(arr, function(value, key) {
        if(field == value)
            return true;
    });
    return false;
} // This returns always false

function isInArrayJavaScript(field, arr) {
    for(var i = 0; i < arr.length; i++) {
        if(field == arr[i])
            return true;
    }
    return false;
} // This works fine

function isInArray() {
    var testArr = ['stack', 'over', 'flow'];
    console.log(isInArrayNgForeach('stack', testArr)); // return false
    console.log(isInArrayJavaScript('stack', testArr)); // return true
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么isInArrayNgForeach总是返回false?我假设因为函数内部有一个函数,但我不确定为什么.

Dav*_*nek 32

第一个选项是不同的,因为return true;函数返回作为参数传递给forEach函数而不是来自外部函数isInArrayNgForeach,这就是为什么最后一行return false;总是在forEach完成时被调用.这使得函数总是返回false.

如果你改变这样的代码,tt将返回预期的结果:

function isInArrayNgForeach(field, arr) {
    var result = false;

    angular.forEach(arr, function(value, key) {
        if(field == value)
            result = true;
    });

    return result;
}
Run Code Online (Sandbox Code Playgroud)


jav*_*ity 5

function isInArrayNgForeach(field, arr) {
    angular.forEach(arr, function(value, key) {
        if(field == value)
            return true; // You are returning the immediate function here not isInArrayNgForeach
   ...
Run Code Online (Sandbox Code Playgroud)

让它按照您的预期工作

function isInArrayNgForeach(field, arr) {
    var result = false;
    angular.forEach(arr, function(value, key) {
        if(field == value)
            result = true;
    });
    return result;
} // This returns expected value
Run Code Online (Sandbox Code Playgroud)