代码之家  ›  专栏  ›  技术社区  ›  Jebathon

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

  •  0
  • Jebathon  · 技术社区  · 7 年前

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

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

    上面的例程无法工作,因为admins返回null,并且filter函数无法正常工作。

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

    3 回复  |  直到 7 年前
        1
  •  2
  •   halfer    7 年前

    您只需要按属性IsAdmin进行筛选。

    此外,您不需要将布尔值与 true false ,只需在您的条件下使用,即:

    //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);
        2
  •  1
  •   Pavlo    7 年前
    var regularUsers = users.filter(function (user) {
        return !user.IsAdmin;
    });
    

    如果返回true,筛选器会将用户添加到列表中

        3
  •  1
  •   Bergi    7 年前

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

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