【问题标题】:Javascript, How to return value from foreach functionJavascript,如何从 foreach 函数返回值
【发布时间】:2016-10-08 12:37:11
【问题描述】:

我有一个函数需要从数组中返回一个值。

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;
    }

我正在尝试获取此值,但发现未定义。

请帮忙。

【问题讨论】:

  • ES6 findreturn $scope.config.find(o => o.app_key === 'search_result_limit') || {};
  • @Tushar 该函数看起来应该为不匹配返回 null,而不是空对象(也只是 .app_value,而不是整个对象)

标签: javascript angularjs node.js


【解决方案1】:

你应该使用过滤方法:

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

考虑到您的 $scope.config 是一个对象数组...

【讨论】:

  • 请注意,这将返回一个数组,而不是按照 OP 的要求从数组中返回一个值。
  • ya.. 我错过了那部分! :)
【解决方案2】:

现代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;
}

【讨论】:

  • 现代 JS 也有箭头函数,可以让代码简洁,如my comment
  • @Tushar 是的,如果你说的是现代的“前沿”。
  • find BS & Arrow Function BS 关闭我会说。
  • @Tushar 我忘了.find 也是 ES6 - 我以为是 ES5 :)
【解决方案3】:

你需要在一个块中的 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;
    }

【讨论】:

  • 你也不能从breakforEach。迭代将继续。
  • @ste2425 做了一些改动...请查看
【解决方案4】:

使用此代码

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2022-11-11
    • 2018-08-17
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多