我试图使用keys
是特定值的coffeescript从对象中获取key
,但是我也同时获得了函数属性和对象自身的属性。
在获取函数属性时,我遇到此错误,因为这些函数属性上不存在track by
表达式。
[ngRepeat:dupes]不允许在转发器中重复。使用“跟踪依据”表达式指定唯一键。中继器:
prod in products | track by prod.ProductTypeCode
,重复密钥:undefined
这是通过track by
表达式:
<option ng-repeat="prod in products | track by prod.ProductTypeCode"
value="{{prod.ProductTypeCode}}">{{prod.ProductType}}
</option>
我在own key
循环中指定了for of
,但是在结果数组中仍然获得了isEmpty
和contains
之类的函数。
我正在使用此for of
循环。
product for own key, product of $scope.products when key isnt 'RTMT'
这是我的$scope.Products
,其中包含密钥。
{
CK: {
ProductCategoryCode: 'DEP',
ProductCategory: 'Deposit',
ProductTypeCode: 'CK'
},
RTMT: {
ProductCategoryCode: 'RTMT',
ProductCategory: 'Retirement',
ProductTypeCode: 'IRA'
},
SAV: {
ProductCategoryCode: 'DEP',
ProductCategory: 'Deposit',
ProductTypeCode: 'SAV'
},
TD: {
ProductCategoryCode: 'DEP',
ProductCategory: 'Deposit',
ProductTypeCode: 'TD'
}
}
虽然我只得到CK
,SAV
和TD
,但我也得到了:
如何仅在咖啡脚本中获取Object
类型而不是function
类型?
使用已编译的javascript,它似乎可以在此代码段中运行,但也在Firefox的调试窗口中显示了功能。
// Generated
var hasProp = {}.hasOwnProperty,
indexOf = [].indexOf || function(item) {
for (var i = 0, l = this.length; i < l; i++) {
if (i in this && this[i] === item) return i;
}
return -1;
};
var obj = {
CK: {
ProductCategoryCode: 'DEP',
ProductCategory: 'Deposit',
ProductTypeCode: 'CK'
},
RTMT: {
ProductCategoryCode: 'RTMT',
ProductCategory: 'Retirement',
ProductTypeCode: 'IRA'
},
SAV: {
ProductCategoryCode: 'DEP',
ProductCategory: 'Deposit',
ProductTypeCode: 'SAV'
},
TD: {
ProductCategoryCode: 'DEP',
ProductCategory: 'Deposit',
ProductTypeCode: 'TD'
}
};
console.log(getValues(obj));
function getValues(obj) {
// Generated
var key, product, ref, results;
ref = obj; // $scope.products;
results = [];
for (key in ref) {
if (!hasProp.call(ref, key)) continue;
product = ref[key];
if (key !== 'RTMT') {
results.push(product);
}
}
return results;
}
答案 0 :(得分:0)
您可以检查typeof
每个属性以查看其是否为函数:
function getValues(obj) {
// Generated
var key, product, ref, results;
ref = obj; // $scope.products;
results = [];
for (key in ref) {
if (!hasProp.call(ref, key)) continue;
product = ref[key];
if (key !== 'RTMT' && typeof ref[key] !== 'function') {
results.push(product);
}
}
return results;
}
答案 1 :(得分:0)
我认为track by $index
就足够了,您将不再收到该异常。
<option ng-repeat="prod in products | track by $index" value="{{prod.ProductTypeCode}}">{{prod.ProductType}}</option>