首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何过滤掉对象数组的副本

如何过滤掉对象数组的副本
EN

Stack Overflow用户
提问于 2016-01-09 20:13:48
回答 3查看 72关注 0票数 0

我有一个类似于这样的对象数组:

代码语言:javascript
复制
$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'}
]

我需要过滤出codegroup是重复的副本。如果其中一个是相同的,它就不应该过滤掉它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-09 20:37:06

下面是另一种基于TLindig对类似问题的回答的方法。

将筛选器方法添加到作用域:

代码语言:javascript
复制
$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方法:

代码语言:javascript
复制
<div ng-repeat="c in SACCodes.filter(onlyUnique)">code: {{c.code}} desc: {{c.description}} group: {{c.group}}</div>

输出:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2016-01-09 20:19:51

这使用帮助器哈希来记录codegroup的哪个组合已经被处理了。只有在找到迄今未使用的组合时,才会将其添加到retVal数组中;

代码语言:javascript
复制
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,从而缩短代码。

票数 1
EN

Stack Overflow用户

发布于 2016-01-09 20:52:13

ES6的方式。

代码语言:javascript
复制
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() ];  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34698404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档