如何过滤在另一个数组中具有值的数组?
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);
我想过滤名称不包含 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);