我有一些数据以嵌套的方式生成键值对的对象。
它将生成如下对象:
$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。
答案 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