如何根据给定的信息查找数组对象?

时间:2016-05-25 00:03:13

标签: angularjs

我在AngularJS控制器中有一个数组,如下所示:

$scope.persons = [{name:'Joey', age:'27'},{name:'Lucy', age:'22'}]

我有一个名字'Lucy',我怎样才能在控制器中获取名称的年龄(而不是HTML)?

3 个答案:

答案 0 :(得分:2)

我在这里创建了一个插件,概述了单个结果,只有年龄,以及多个结果。

这也可以在过滤器中实现,该过滤器在Angular站点上记录:https://docs.angularjs.org/api/ng/filter/filter

https://plnkr.co/edit/OFRMzpQrZfTOnaFyJP7Z?p=info

angular.module('plnk',[]).controller('plnkCtrl', function($scope){

  // Note, I added a second Joey here to test the multiple function.
  // For output, check the browser console.

  $scope.persons = [{name:'Joey', age:'27'},{name:'Joey', age:'28'},{name:'Lucy', age:'22'}]

  console.log('Single -> ', getAgeSingle('Lucy'));
  console.log('Multiple ->',getAgeMultiple('Joey'));

  function getAgeMultiple(personLookup) {

    var results = [];
    angular.forEach($scope.persons,function(person){
       if (person.name === personLookup) {
         results.push(person);
         // or results.push(person.age) for age only
       }
     });
    return results;

  }

  function getAgeSingle(personLookup) {
    var result = '';
    angular.forEach($scope.persons,function(person){
       if (person.name === personLookup && !result) {
         result = person.age;
       }
     });
    return result;
  }

});

答案 1 :(得分:0)

如果你想遍历范围:

$scope.persons = [{name:'Joey', age:'27'}, {name:'Lucy', age:'22'}]

function getAge(name) {
    angular.forEach($scope.persons, function (value, index) {
        if (value.name === name) {
            return parseInt(value.age, 10);
        }
    });
    return undefined;
}

HTML方式:

<div ng-app="myApp" ng-controller="MainCtrl">
    <table>
        <tr ng-repeat="person in persons">
            <td>Name: {{person.name}} Age: {{person.age}}</td>
        </tr>
    </table>
</div>

JS:

var app = angular.module('myApp', []);

app.controller('MainCtrl', function ($scope) {
    $scope.persons = [{name:'Joey', age:'27'}, {name:'Lucy', age:'22'}];
});

答案 2 :(得分:0)

只需遍历数组并检查,如下所示:

function getAge(name)
{
  for (var i = 0; i < $scope.persons.length; i++)
  {
     var person = $scope.persons[i];
     if (person.name === name)
     {
        return parseInt(person.age, 10);
     }
  }

  return undefined;
}

这有一些警告 - 如果你有傻瓜,你只会获得第一个并且它以线性时间运行。如果您控制数据源,最好使用JS对象/ hashmap / dictionary /无论您想要调用它。