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

AngularJS select array hash element by name/value

本文关键字:选择 数组 哈希 元素 AngularJS      更新时间:2023-09-26

我的一个select标签有以下angular数组

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

在上面的数组中,我如何像一样通过nameval来选择项目,而不是通过索引(1)来选择项目

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

我最初在这里发布了一个很长的问题,但后来我意识到这是我的问题

的更简单/焦点的方式

如果您正在使用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

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

$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');

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

您可以使用Lodash库的find方法(http://lodash.com/docs#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' });

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

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');