AngularJS - 过滤搜索所有真值

时间:2015-01-20 17:45:35

标签: angularjs filter

我有一些数据以嵌套的方式生成键值对的对象。

它将生成如下对象:

$scope.selectedVals = {
    shape: {
        oval: false,
        rectangle: true
    },
    size: {
        large: false,
        medium: true
    }
}

我想以编程方式使用$ filter来获取唯一的值。我正在寻找的结果是:

var filtered = {
    shape: {
        rectangle: true
    },
    size: {
        medium: true
    }
}

我尝试使用$ filter,但没有运气,我只是回到原始对象:

var filtered = $filter('filter')($scope.selectedVals, true);
                                 // the object        // the value to search

我知道我可以通过循环自己迭代对象,但我正在寻找一种方法来使用$ filter。

这是一个掠夺者:http://plnkr.co/edit/t3FhSvLgyXE8A3jfxWG0?p=preview

3 个答案:

答案 0 :(得分:1)

试试这个:

var filtered = $filter('filter')($scope.selectedVals, {$: true});

这是角度文档:

  

对象:模式对象可用于过滤特定属性   数组包含的对象。例如{name:“M”,phone:“1”}   谓词将返回具有属性名称的项目数组   包含“M”和包含“1”的财产电话。 特殊财产   可以使用name $(如{$:“text”})来接受任何匹配   对象的属性或其嵌套对象属性。那是   相当于简单的子串与所描述的字符串匹配   以上。可以通过在字符串前加上!来取消谓词。   例如{name:“!M”}谓词将返回一个项目数组   财产名称不包含“M”。

     

请注意,命名属性将匹配同一级别的属性   只有,而特殊的$属性将匹配相同的属性   等级或更深。例如。一个数组项,如{name:{first:'John',last:   'Doe'}}将不会与{name:'John'}匹配,但会被匹配   {$:'John'}。

答案 1 :(得分:0)

您需要在数组上应用$filter而不是对象。

请注意,只有在您编写过滤指令时,才能在代码中使用$ filter。如果你需要的只是"清洁"你的数据然后做一个普通的纯javascript更好,更高效。

答案 2 :(得分:0)

$scope.onChange = function(){

    var arrayVals = Object.keys($scope.selectedVals).map(function (key) {return $scope.selectedVals[key]});
    console.log('original',arrayVals); 

    // I only want values which are true
    var filtered = $filter('filter')(arrayVals, {$:true});

    console.log('filtered', filtered);
  };

Basicallly获取数组中的值,然后您可以在true

上进行过滤