我有一个包含products数组的数据对象。
$scope.data = {
products: [
{ name: "Product #1", description: "A product",
category: "Category #1", price: 100 },
{ name: "Product #2", description: "A product",
category: "Category #1", price: 110 },
{ name: "Product #3", description: "A product",
category: "Category #2", price: 210 },
{ name: "Product #4", description: "A product",
category: "Category #3", price: 202 }]
};
然后我有一个自定义过滤器和一个' for'我可以通过data[i][propertyName]
而不是data[i].propertName
来获取类别属性值。任何人都可以解释原因吗?
我正在通过我的ng-repeat作为集合传递data.products,然后对其应用过滤器说unique: 'category'
<a ng-repeat="item in data.products | orderBy: 'category' | unique: 'category' " ></a>
&#13;
我的过滤器
angular.module('customFilters', [])
.filter('unique', function(){
return function(data, propertyName){
if(angular.isArray(data) && angular.isString(propertyName)) {
var results = [];
var keys = {};
for(var i = 0; i < data.length; i++){
var val = data[i][propertyName];
if(angular.isUndefined(keys[val])){
keys[val] = true;
results.push(val);
}
}
return results;
} else {
return data;
}
}
});
我的理解是当我到达data[i]
时,我得到一个{'name' : 'blah', 'category': 'category1'...}
的项目,它是一个对象。所以我也可以通过data[i].propertyName
访问点符号来获取值!
请帮助/纠正/验证我的理解!
答案 0 :(得分:1)
data[i].propertyName
获取您对象所没有的propertyName
属性。点符号不能(通常)用于访问存储在变量中的属性名称,您应该使用data[i][propertyName]
或其他元编程方法,如Reflect.get。此外,data[i].propertName
还有一个拼写错误。
答案 1 :(得分:1)
当您执行data[i].propertyName
时,它会使用键 propertyName
而不是变量propertyName
的值来获取值。
由于您需要在变量propertyName
中获取密钥库,因此您应该坚持使用Bracket表示法