我的angular
代码
select
数组
var names= [{name: 'Superman', val: '1'}, {name: 'Batman', val: '2'}];
$scope.names =names;
$scope.FormData = {};
$scope.FormData.name = $scope.names[1];
在上面的数组中,我不是按索引(1
)选择项目,而是如何按name
或val
选择项目,例如
$scope.FormData.name = $scope.names['2']; #will select the {name: 'Batman', val: '2'}
我最初发布了一个冗长的问题here,但后来我意识到这是我问题的更简单/更集中的方式
答案 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');