Как отфильтровать массив, имеющий значения в другом массиве? - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу отфильтровать массив, не имеющий user в качестве имени. В конце я получу только id of 2,3 из второго массива. Какой эффективный способ? Я устал использовать some and filter, но там написано some and filter is not a function.

Первый массив

0: "user"
1: "dashboards"

Второй массив


0: {id: "1", name: "admin", normalizedName: "admin", concurrencyStamp: null, selected: false}
1: {id: "2", name: "dashboard", normalizedName: "dashboard", concurrencyStamp: "", selected: false}
2: {id: "3", name: "user", normalizedName: "user", concurrencyStamp: "", selected: false}

Моя первая попытка

for (var i = 0; i < sroles.length; i++) {
    for (var j = 0; j < roles.length; j++) {
        if (roles[j] == sroles[i].name) {
            realRoles.push(sroles[i]);
        }
    }
}

Вторая попытка


var roles = {...this.user.roles};
var sroles ={...this.selectedRoles} ;

sroles.filter(function(e){
    return roles.some(x=>x ==e.name);
})

Ошибка второй попытки * Фильтр 1028 *

или некоторые другие не является функцией ,

третья попытка

 Object.keys(sroles).filter(element =>Object.values(roles).some(x=>x == sroles[element]));

Желаемый вывод

0: {id: "2", name: "dashboard", normalizedName: "dashboard", concurrencyStamp: "", selected: false}
1: {id: "3", name: "user", normalizedName: "user", concurrencyStamp: "", selected: false}


Мое решение, которое рабочая

Object.keys(sroles).forEach(function (key) {
            Object.keys(roles).forEach(function (key2) {
                if (roles[key2] == sroles[key].name) {
                    realRoles.push(sroles[key]);
                }
            });
        });

1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете использовать Array.prototype.filter и Array.prototype.includes :

const arr1 = ["user", "dashboard"];

const arr2 = [{
    id: "1",
    name: "admin",
    normalizedName: "admin",
    concurrencyStamp: null,
    selected: false
  },
  {
    id: "2",
    name: "dashboard",
    normalizedName: "dashboard",
    concurrencyStamp: "",
    selected: false
  },
  {
    id: "3",
    name: "user",
    normalizedName: "user",
    concurrencyStamp: "",
    selected: false
  }
];

const filtered = arr2.filter(({name}) => arr1.includes(name));

console.log(filtered);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...