Удалить объекты из массива, ссылаясь на другой массив - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть массив с именем new_svrgrp_member вот так -

new_svrgrp_member = [];
new_svrgrp_member.push({
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN001271"
},{
    Member:"m82298s2", MemberClass:"user", Parent:"SVR_ADM_WN001271"
},{
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN000868"
},{
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN000901"
},{
    Member:"v38250s", MemberClass:"user", Parent:"SVR_ADM_WN000903"
},{
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN002085"
},{
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN001367"
},{
    Member:"v38250s", MemberClass:"user", Parent:"SVR_ADM_WN001367"
},{
    Member:"d76686g2", MemberClass:"user", Parent:"SVR_ADM_WNR00096"
},{
    Member:"s98681s2", MemberClass:"user", Parent:"SVR_ADM_WGR00006"
})

Тогда у меня есть массив FilterMmbr вот так -

FilterMmbr = [];
FilterMmbr.push({Name: "s98681s2"},{Name: "s98681s"},{Name: "v38250s"},{Name: "SI_VWAdmChk"})

Мне нужно вынуть все объектыиз new_svrgrp_member, которые совпадают со свойством FilterMmbr's Name со свойством new_svrgrp_member's Member.

Для этого я использовал следующий код -

for each(Mmbr in FilterMmbr)
{
    var removeIndex = new_svrgrp_member.map(function (item) {
        return item.Member;
    }).indexOf(Mmbr.Name);
    ~removeIndex && new_svrgrp_member.splice(removeIndex, 1);
}

удаляет объектыно только с одним соответствием, вот вывод, который я получаю -

[INFO] New members after filtering...
[INFO] Member:a25346j2 MemberClass:user Parent:SVR_ADM_WN001271
[INFO] Member:m82298s2 MemberClass:user Parent:SVR_ADM_WN001271
[INFO] Member:a25346j2 MemberClass:user Parent:SVR_ADM_WN000868
[INFO] Member:a25346j2 MemberClass:user Parent:SVR_ADM_WN000901
[INFO] Member:a25346j2 MemberClass:user Parent:SVR_ADM_WN002085
[INFO] Member:a25346j2 MemberClass:user Parent:SVR_ADM_WN001367
[INFO] Member:v38250s MemberClass:user Parent:SVR_ADM_WN001367  //Still exists
[INFO] Member:d76686g2 MemberClass:user Parent:SVR_ADM_WNR00096

Как избавиться от всех объектов со совпадениями и почему остался еще один объект?

1 Ответ

1 голос
/ 06 ноября 2019

Вы можете использовать Array.filter для удаления значений из new_svrgrp_member, которые соответствуют имени в FilterMmbr (найдено с помощью Array.some):

let new_svrgrp_member = [];
new_svrgrp_member.push({
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN001271"
},{
    Member:"m82298s2", MemberClass:"user", Parent:"SVR_ADM_WN001271"
},{
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN000868"
},{
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN000901"
},{
    Member:"v38250s", MemberClass:"user", Parent:"SVR_ADM_WN000903"
},{
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN002085"
},{
    Member:"a25346j2", MemberClass:"user", Parent:"SVR_ADM_WN001367"
},{
    Member:"v38250s", MemberClass:"user", Parent:"SVR_ADM_WN001367"
},{
    Member:"d76686g2", MemberClass:"user", Parent:"SVR_ADM_WNR00096"
},{
    Member:"s98681s2", MemberClass:"user", Parent:"SVR_ADM_WGR00006"
});

let FilterMmbr = [];
FilterMmbr.push({Name: "s98681s2"},{Name: "s98681s"},{Name: "v38250s"},{Name: "SI_VWAdmChk"});

new_svrgrp_member = new_svrgrp_member.filter(m => !FilterMmbr.some(f => f.Name == m.Member));
console.log(new_svrgrp_member);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...