Javascript 按ID数组筛选对象数组
我有一个服务ID的数组Javascript 按ID数组筛选对象数组,javascript,arrays,angular,object,Javascript,Arrays,Angular,Object,我有一个服务ID的数组activeid,还有另一个数组servicesList,其中包含服务对象 例如:- activeIds = [202, 204] serviceList = [{ "id":201, "title":"a" }, { "id":202, "title":"a"
activeid
,还有另一个数组servicesList
,其中包含服务对象
例如:-
activeIds = [202, 204]
serviceList = [{
"id":201,
"title":"a"
},
{
"id":202,
"title":"a"
},
{
"id":203,
"title":"c"
},
{
"id":204,
"title":"d"
},
{
"id":205,
"title":"e"
}];
我想要ID不是第一个数组的一部分的所有服务(obj),即activeID
。从上面的示例代码中,我想要ids 201203205的服务obj
最终产出-
expectedArray = [{
"id":201,
"title":"a"
},
{
"id":203,
"title":"c"
},
{
"id":205,
"title":"e"
}];
下面是我的代码尝试。但这根本不正确。请帮忙-
const activeIds = e; // [202, 204]
const obj = [];
this.serviceList.map((s: IService) => {
activeIds.map((id: number) => {
if (id !== s.id) {
obj.push(s);
}
});
});
只需将与一起使用,即可检查下一个数组中的匹配元素
var arr = serviceList.filter(item => activeIds.indexOf(item.id) === -1);
演示
让activeIds=[202204]
让serviceList=[{
“id”:201,
“标题”:“a”
},
{
“id”:202,
“标题”:“a”
},
{
“id”:203,
“标题”:“c”
},
{
“id”:204,
“标题”:“d”
},
{
“id”:205,
“标题”:“e”
}];
设arr=serviceList.filter(函数(项){
返回activeIds.indexOf(item.id)=-1;
});
控制台日志(arr)
使用filter
和indexOf
方法。indexOf
将检查当前id是否存在于activeID
数组中
var-activeIds=[202204]
var服务列表=[{
“id”:201,
“标题”:“a”
},
{
“id”:202,
“标题”:“a”
},
{
“id”:203,
“标题”:“c”
},
{
“id”:204,
“标题”:“d”
},
{
“id”:205,
“标题”:“e”
}
];
var filteredArray=serviceList.filter(函数(项){
返回activeIds.indexOf(item.id)=-1
});
log(filteredArray)
您可以使用filter
和includes
方法执行此操作
constactiveids=[202204]
const serviceList=[{“id”:201,“title”:“a”},{“id”:202,“title”:“a”},{“id”:203,“title”:“c”},{“id”:204,“title”:“d”},{“id”:205,“title”:“e”}]
const result=serviceList.filter({id})=>!activeIds.includes(id));
console.log(result)
您可以组合indexOf
来检查当前id是否在活动阵列上并过滤阵列。与上面发布的不一样我有同样的疑问。似乎我们几乎同时发布OP使用箭头功能,为什么不应该包括工作?最初他没有这个问题!或者我可能错过了:(很好,我需要另一个,但我的解决方案是省去在activeIds
前面的!这是我的解决方案。请投票吧,先生!如果id数组很长,我建议您将其转换为对象查找或映射,以避免在数组中对每个元素进行线性搜索。否则,使用array.filter函数就像sugges一样在下面的每一个答案中。