过滤数组的元素(如果包含在其他元素中)

Posted

技术标签:

【中文标题】过滤数组的元素(如果包含在其他元素中)【英文标题】:Filter elements of array if contained in other 【发布时间】:2018-05-17 22:58:45 【问题描述】:

我有两个如下格式的数组,

this.originalArray = [
    id: 10,
    name: 'a',
    roleInfo: [
        roleID: 5,
        roleName: 'USER'
    ]
,

    id: 20,
    name: 'b',
    roleInfo: [
        roleID: 5,
        roleName: 'Admin',
    ]
 ,
 
     id: 30,
     name: 'c',
     roleInfo: [
         roleID: 5,
         roleName: 'Support',
     ]
 ]

this.removeElements =      
    roleInfo: [
        roleID: 5,
        roleName: 'Support',        
]  

问题:如何过滤 removeElements 数组中不存在的 originalArray

【问题讨论】:

到目前为止你有什么? How do I filter an array with TypeScript in Angular 2?的可能重复 尝试一下,然后返回一个具体的问题/问题 @Jota.Toledo 我需要过滤不同数组的数组 【参考方案1】:

你可以的

var reuslt =  originalArray.filter(item => removeElements.find(test => test.id == item.id));

【讨论】:

【参考方案2】:

试试这个:

originalArray.filter(item => removeElements.some(f => f.id == item.id));

【讨论】:

【参考方案3】:

这适用于(几乎)所有浏览器。

var a = [1, 2, 3, 4, 5];
var b = [2, 3];

var result = [], found;
for (var i = 0; i < a.length; i++) 
    found = false;
    // find a[i] in b
    for (var j = 0; j < b.length; j++) 
        if (a[i] == b[j]) 
            found = true;
            break;
        
    
    if (!found) 
        result.push(a[i]);
    

或者如果兼容性不是问题

a.filter(i => b.some(j => j.id === i.id));

【讨论】:

【参考方案4】:
this.originalArray =[  id: 10, name: 'a', roleInfo: [ roleID: 5, roleName: 'USER' ] ,
   id: 20, name: 'b', roleInfo: [ roleID: 5, roleName: 'Admin', ] ,
    id: 30, name: 'c', roleInfo: [ roleID: 5, roleName: 'Support', ] , ]

   this.removeElements =[
    
        id: 30,
        name: 'c',
        roleInfo: [
            roleID: 5,
            roleName: 'Support',
        ]
    ]  

    var finalArr = [];
   this.originalArray.forEach(function(d)
   var filterArr =  this.removeElements.filter(function(d1)
      if(d1.id == d.id && d1.name == d.name)
        return d1;
      
    );
    if(filterArr.length == 0)
      finalArr.push(d);
    
   )

【讨论】:

以上是关于过滤数组的元素(如果包含在其他元素中)的主要内容,如果未能解决你的问题,请参考以下文章

过滤 php 中的数组,同时具有值​​和键相关条件

提高过滤可能包含数十万个元素的数组的效率

如果字典元素为空,如何过滤字典数组?

BigQuery LEFT JOIN 一个表并根据条件过滤其数组元素

php数组的重复值如何过滤掉

在Javascript中过滤数组[重复]