按ID数组过滤对象数组

Yas*_*nik 1 javascript arrays object angular

我有一组activeIds服务ID,还有另一个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"
               }];
Run Code Online (Sandbox Code Playgroud)

我想要所有的服务(obj),其id不是第一个数组的一部分,即activeIds.从上面的示例代码我想要ids 201,203,205的服务obj

最终输出 -

expectedArray = [{  
                "id":201,
                "title":"a"
               },
               {  
                "id":203,
                "title":"c"
               },
               {  
                "id":205,
                "title":"e"
               }];
Run Code Online (Sandbox Code Playgroud)

这是我尝试编码.但这根本不正确.请帮忙-

    const activeIds = e; // [202, 204]
    const obj = [];
    this.serviceList.map((s: IService) => {
        activeIds.map((id: number) => {
            if (id !== s.id) {
                obj.push(s);
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

Saj*_*ran 20

您可以简单地使用array.filterwithindexOf检查下一个数组中的匹配元素。

var arr = serviceList.filter(item => activeIds.indexOf(item.id) === -1);
Run Code Online (Sandbox Code Playgroud)

演示

var arr = serviceList.filter(item => activeIds.indexOf(item.id) === -1);
Run Code Online (Sandbox Code Playgroud)


Nen*_*car 5

你可以用filterincludes方法做到这一点.

const activeIds = [202, 204]
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)
Run Code Online (Sandbox Code Playgroud)