【问题标题】:finding property with true flag in an object在对象中查找具有 true 标志的属性
【发布时间】:2016-10-31 05:08:28
【问题描述】:

我有一个具有三个属性的对象。

$scope.badges = {'Full Service': false, 'Negotiable': true, 'Under Warranty': false};

我如何使用true 标志从它extract OR find property

基本上,我想从该对象中找到具有 true 标志的属性,然后将其分配给另一个范围变量。

我的 HTML

<div ng-repeat="(badge,enabled) in badges" class="checkbox">
    <label>
        <input type="checkbox" ng-model="badges[badge]" /> {{badge}}
    </label>
</div>

角度控制器

$scope.badges = {
    'Full Service History': false,
    'Negotiable': false,
    'Under Warranty': false,
    ' Urgent': false
};

我想看看用户选择了哪个复选框。

【问题讨论】:

  • 这发生在什么级别?在控制器中?服务?模板?任何额外的代码或更好的plnkrcodepen 将不胜感激。旁注:直接更改范围时要小心;很容易创建“范围汤”或更糟......角度摘要问题。
  • @Dom,我更新了我的问题。希望它能帮助你回答我的问题。

标签: javascript html arrays angularjs


【解决方案1】:

您需要遍历每个属性并检查其值是否为真:

$scope.badges = {'Full Sevrice': false, 'Negotiable': true, 'Under Warranty': false};
var keys = [];

for(var name in $scope.badges) 
    if ($scope.badges[name]) {
        keys.push(name);
    }
}

【讨论】:

  • 感谢您的回答
【解决方案2】:

更清洁的解决方案:

$scope.activeKeys = [];
for (var key in $scope.badges) {
    if ($scope.badges[key]) {
        $scope.activeKeys.push(key);
    }
}

【讨论】:

  • 谢谢,看起来更清洁的解决方案。
  • 这几乎就是我的答案。 (:
  • 这个东西作为一个单行:$scope.activeKeys = Object.keys($scope.badges).filter(k =&gt; $scope.badges[k])
  • @Thomas 像往常一样,功能总是赢:p
  • 我在选择正确答案时是否做错了什么?我知道'F'首先回答了,我对此非常感谢,但事实是我发现@Bwaxxlo 的回答非常简洁和简短。我不想伤害任何人的感情。顺便说一句,我赞成其他所有答案。那是我能做的最大的正义。加油伙计们。
【解决方案3】:

您可以在控制器中使用此代码完成您想要的操作:

$scope.trueFlags = [];
for(var prop in $scope.badges) {
  if($scope.badges.hasOwnProperty(prop) && prop === true) {
    $scope.trueFlags.push(prop);
  }
}

【讨论】:

  • 感谢您的回答
猜你喜欢
  • 2013-11-23
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 2014-05-07
  • 1970-01-01
  • 2014-05-05
相关资源
最近更新 更多