根据值筛选器从数组中选择字段

Selecting field from array based on a value filter

本文关键字:数组 选择 字段 筛选      更新时间:2023-09-26

对于Angular(和整个MEAN堆栈)来说是非常新的。

我有一个MongoDB数据库集合如下:

db.users({ 
    username: "Test1", 
    fname: "Bob", 
    lname: "Saget", 
    email: "test@test.com", 
    password: "12345",  
    status: [{ 
        active: false, 
        "non-active": false, 
        suspended: true, 
        "un-confirmed": false, 
        banned: false 
    }] 
})

我只是希望将所有用户打印到屏幕上。而且一直都很成功,就像这样。

        <tr ng-repeat="user in users">
            <td>{{user.username}}</td>
            <td>{{user.fname + ' ' + user.lname}}</td>
            <td>{{user.email}}</td>
            <td>{{user.password}}</td>
            <td></td>
        </tr>

我的问题是试图根据布尔值显示状态数组的字段(而不是值)。因此,在示例中,它将在页面中读取'suspended'而不是'true'(并且只带回真实值-只有一个)。

我是不是变得对眼了,对于这种类型的功能,是否有更好的数据库结构来坚持?

我试过用filter:{}选项组合ng-if和ng-repeat。

如果需要,我可以提供更多的细节。

你们会怎么做?

多谢

获得用户后,您可以遍历他们并像这样更新状态。

angular.forEach($scope.users, function(a, b){
  var user = a;
  var status = a.status[0]; // <-- because your status are an array we pick the first one.
  for (var k in status) {
    if (status.hasOwnProperty(k)) {
      if (status[k]) { // <-- if status is true then get the key.
        user.status = k; // <-- set the user status object to the key.
      }
    }
  }
});

您可以将user.status = k更改为任何您想要的,将其设置为status将覆盖状态数组。

工作示例-> http://jsbin.com/zarulo/1/edit?html,js,output

希望这对你有帮助!