过滤数组的元素(如果包含在其他元素中)
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);
)
【讨论】:
以上是关于过滤数组的元素(如果包含在其他元素中)的主要内容,如果未能解决你的问题,请参考以下文章