我的一个select
标签有以下angular
数组
var names= [{name: 'Superman', val: '1'}, {name: 'Batman', val: '2'}];
$scope.names =names;
$scope.FormData = {};
$scope.FormData.name = $scope.names[1];
在上面的数组中,我如何像一样通过name
或val
来选择项目,而不是通过索引(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');