我有一个类似于这样的对象数组:
$scope.SACCodes = [
{'code':'023', 'description':'Spread FTGs', 'group':'footings'},
{'code':'024', 'description':'Mat FTGs', 'group':'footings'},
{'code':'025', 'description':'CONT. FTGs', 'group':'footings'},
{'code':'025', 'description':'CONT. FTGs', 'group':'levels'},
{'code':'023', 'description':'Trucks', 'group':'footings'}
]我需要过滤出code和group是重复的副本。如果其中一个是相同的,它就不应该过滤掉它。
发布于 2016-01-09 20:37:06
下面是另一种基于TLindig对类似问题的回答的方法。
将筛选器方法添加到作用域:
$scope.onlyUnique = function(value, index, self) {
codes = self.map(function(c) {return c.code});
groups = self.map(function(c) {return c.group});
return codes.indexOf(value.code) === index || groups.indexOf(value.group) === index;在ng-重复或任何您想要的唯一值中调用filter方法:
<div ng-repeat="c in SACCodes.filter(onlyUnique)">code: {{c.code}} desc: {{c.description}} group: {{c.group}}</div>输出:
code: 023 desc: Spread FTGs group: footings
code: 024 desc: Mat FTGs group: footings
code: 025 desc: CONT. FTGs group: footings
code: 025 desc: CONT. FTGs group: levels发布于 2016-01-09 20:19:51
这使用帮助器哈希来记录code和group的哪个组合已经被处理了。只有在找到迄今未使用的组合时,才会将其添加到retVal数组中;
function dedup() {
var dups = {};
var retVal = [];
for (var i = 0; i < $scope.SACCodes.length; i++) {
var sCode = $scope.SACCodes[i];
var key = sCode.code +'/'+ sCode.group;
if (!dups[key]) {
retVal.push (sCode);
dups[key] = sCode;
}
}
return retVal;
}几年后,您可以使用Object.values(dups);而不是retVal,从而缩短代码。
发布于 2016-01-09 20:52:13
ES6的方式。
var m = new Map();
SACCodes.forEach ( function( item ) {
var key = item.code + item.group;
if ( !m.has( key ) ){
m.set( key, item );
}
});
SACCodes= [ ...m.values() ]; https://stackoverflow.com/questions/34698404
复制相似问题