Я хочу отфильтровать массив, не имеющий 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]);
}
});
});