【问题标题】:Return object in array with specific property返回具有特定属性的数组中的对象
【发布时间】:2016-09-16 18:46:04
【问题描述】:

我对编写自己的 JS 函数还很陌生,我正在为这个而苦苦挣扎。

我想遍历一个对象数组,找到一个与特定 ID 匹配的对象,然后返回该对象。

到目前为止,这是我所拥有的:

var findTeam = function() {
  $scope.extraTeamData.forEach(team) {
     if(team.team_id === $scope.whichTeam) { return team }
  }
    $scope.thisTeam = team;
};

$scope.teamDetails 是我的数组,$scope.whichTeam 变量包含我正在检查的正确 ID。

最终我希望能够将函数产生的对象分配给$scope.thisTeam 变量,这样我就可以在视图中调用它的属性。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 只有一个结果吗?
  • 您能告诉我们您当前的实施遇到了什么问题吗?
  • 你可以用$scope.thisTeam = team;代替return team
  • 感谢 Matt Burland - 稍微精简了一下。我想以最有效的方式编写它,并最终生成一个包含所需对象的变量。
  • forEach 需要回调。您的 forEach(team) { 在语法上是错误的。它应该是 forEach(function (team) { 或者如果是 ES6 则应该是 forEach(team => {。并且缺少关闭双亲。

标签: javascript arrays angularjs function foreach


【解决方案1】:

您可以使用 Array#some 如果找到则结束迭代

var findTeam = function() {
    $scope.extraTeamData.some(function (team) {
        if (team.team_id === $scope.whichTeam) { 
            $scope.thisTeam = team;
            return true;
        }
    });
};

【讨论】:

  • 我把它放到我的 Angular 控制器中,它完全破坏了功能......:/
  • 我想我的原始数组可能有问题。不过谢谢-您的代码帮助我构建了函数:)
【解决方案2】:

将您的$scope.thisTeam = team; 移至if 检查范围内。

var findTeam = function() {
  $scope.teamDetails.forEach(team) {
     if(team.team_id === $scope.whichTeam) {
         $scope.thisTeam = team;
     }
  }
};

【讨论】:

    【解决方案3】:
    $scope.team = $scope.teamDetails.filter(function (team) {
      return team.team_id === $scope.whichTeam;
    })[0];
    

    您需要使用filter 数组方法。它创建与给定谓词匹配的新数组元素(返回布尔值的函数)。然后你只需取第一个值。

    您也可以使用find,但尚未在所有浏览器中实现。

    看起来像这样:

    $scope.team = $scope.teamDetails.find(function (team) {
      return team.team_id === $scope.whichTeam;
    });
    

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2015-10-21
      • 1970-01-01
      • 2018-07-20
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多