如何过滤在另一个数组中具有值的数组?

how to filter an array having values in another array?

我想过滤名称不包含 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);
})

第二次尝试错误

filter or some is not a function.

第三次尝试

 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]);
                }
            });
        });

您可以使用 Array.prototype.filter and 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);