AngularJS按名称/值选择数组哈希元素

时间:2014-09-01 22:34:50

标签: javascript arrays angularjs

我的angular代码

之一有以下select数组
var names= [{name: 'Superman', val: '1'}, {name: 'Batman', val: '2'}];
$scope.names =names;
$scope.FormData = {};
$scope.FormData.name = $scope.names[1];

在上面的数组中,我不是按索引(1)选择项目,而是如何按nameval选择项目,例如

$scope.FormData.name = $scope.names['2']; #will select the {name: 'Batman', val: '2'}

我最初发布了一个冗长的问题here,但后来我意识到这是我问题的更简单/更集中的方式

4 个答案:

答案 0 :(得分:7)

如果您使用angular,为什么不使用$filter中的内置版本?

https://docs.angularjs.org/api/ng/filter/filter

在您的情况下,如果您想要在控制器中进行过滤,则下面的代码将检索Array,其中names内的所有匹配项都与搜索“超人”匹配:

$filter('filter')($scope.names, {name:'Superman'})

如果您确信至少会有一场比赛,您可以这样做以获得第一场比赛:

var matches = $filter('filter')($scope.names, {name:'Superman'});
var match = matches[0]:

请注意,如果没有匹配项,则match将为undefined

答案 1 :(得分:2)

  

在上面的数组中,不是按索引(1)选择项目,而是如何   我可以按名称选择项目

您可以使用 Lodash 库(http://lodash.com/docs#find)的find方法:

var names= [{name: 'Superman', val: '1'}, {name: 'Batman', val: '2'}];

var matchingBatman = _.find(names, { name: 'Batman' });

matchingBatman是:{name: 'Batman', val: '2'}

如果您想通过val找到

,也可以这样做
var matchingBatman = _.find(names, { val: '2' });

答案 2 :(得分:1)

如果你想要一个可重复使用的功能,你可以这样做:

$scope.find = function(list, attributeName, attributeValue){
    var returnVal = {};
    angular.forEach(list,function(item){
        if(item[attributeName]){
          if(item[attributeName] === attributeValue){
            returnVal = item;
          }
        }
    });
    return returnVal;
};

$scope.FormData.name = $scope.find(names,'name','Batman');

答案 3 :(得分:0)

如果您想编写函数而不是使用库

function selectByProperty(key, val){

    for(var i=0; i< $scope.names.length; i++){
        if($scope.names[i][key] === val){
           return $scope.names[i];
         }
     }

}
$scope.FormData.name  = selectByProperty('val','2');