JavaScript - 使用数组原型方法从以下数组中删除索引

时间:2018-01-29 20:40:29

标签: javascript arrays

我有一组用户,如下所示。我试图通过查找users数组中管理员的索引并过滤掉这些索引来过滤掉管理员。

var users = [
  {name: "Jeff", IsAdmin: false},
  {name: "Jonah", IsAdmin: true},
  {name: "Jonathan", IsAdmin: true}
];

var admins = users.findIndex(function (user) {
     user.IsAdmin == true;
});

var regularUsers = users.filter(function (value, index) {
    return admins.indexOf(index) == -1;
});

上面的例程不起作用,因为管理员返回null并且过滤器功能无法正常工作。

有没有更简单的方法来写这个?

3 个答案:

答案 0 :(得分:2)

您只需按属性IsAdmin进行过滤。

此外,您不需要将布尔值与truefalse进行比较,只需在您的条件下使用它,即:

//You don't need that because `IsAdmin` is a boolean attribute.
return user.IsAdmin == true

//So, use that attribute directly.
return user.IsAdmin

var users = [
  {name: "Jeff", IsAdmin: false},
  {name: "Jonah", IsAdmin: true},
  {name: "Jonathan", IsAdmin: true}
];

var admins = users.findIndex(function (user) {
     return !user.IsAdmin;
});
console.log(admins);

var regularUsers = users.filter(function (user) {
    return !user.IsAdmin;
});

console.log(regularUsers);

答案 1 :(得分:1)

var regularUsers = users.filter(function (user) {
    return !user.IsAdmin;
});

如果您返回true,则过滤器会将用户添加到列表中

答案 2 :(得分:1)

findIndex返回单个索引,而不是索引数组。无论如何,按索引过滤效率都非常低 - 只需直接使用谓词:

const admins = users.filter(user => user.IsAdmin);
const regularUsers = users.filter(user => !user.IsAdmin);