为什么我得到 ..is not a function?
why do I get ..is not a function?
我正在尝试创建 angular 服务,但出现错误。这是服务:
var app = angular.module('plunker', []);
// Filter Service that returns records with crdamt positive:
app.factory('FilterService', function() {
return function(d) {
var filteredData = [];
console.log(d);
d.forEach(function(item)
{
if (item.cramt > 0) {
filteredData.push(item);
}
});
return filteredData;
}
});
然而在我的单元测试中我们得到:
it('should return transactions where credit is positive', function() {
var jsonData = {
"transactions": [{
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
}, {
"date": "1/1/2002",
"desc": "Transaction",
"cramt": 110,
"dbamt": 10
}]
};
var filteredRecords = FilterService(jsonData);
expect(filteredRecords).toEqual({
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
});
});
为什么会出现错误:
TypeError: d.forEach is not a function
试试吧。我期待变量 d
作为数组。
angular.forEach(d, function(item){
if (item.cramt > 0) {
filteredData.push(item);
}
});
您没有为 angular js 的 forEach
函数使用正确的语法。请参考此 angular.forEach 指令
forEach
方法在 arrays
上可用。
查看您的 jsonData
,您可以这样做:
app.factory('FilterService', function() {
return function(data) {
var filteredData = [];
console.log(data.transactions);
data.transactions.forEach(function(item)
{
if (item.cramt > 0) {
filteredData.push(item);
}
});
return filteredData;
}
});
P.S: 请阅读错误信息。它清楚地表明 d.forEach
不是函数。这就像尝试定义一个对象:
var person = {
'name':'Paul'
};
并尝试访问 person.height()
。 height
不是 person
对象的 属性,您正在尝试访问 undefined property as a function
.
您的测试试图过滤整个对象而不是事务数组。
var filteredRecords = FilterService(jsonData);
expect(filteredRecords).toEqual({
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
});
应该是
var filteredRecords = FilterService(jsonData.transactions);
expect(filteredRecords).toEqual([{
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
}]);
请查看更新后的 plnkr。 forEach 仅用于数组,而您的 'd' returns 是一个对象。
以下是对 plnkr 的link:
``http://plnkr.co/edit/o65e0xEsBiW0jpawhGse?p=preview
你可以这样定义过滤器。
app.factory('FilterService', function() {
return function(d) {
var filteredData = [];
var boolDataISFound = false;
console.log(d.transactions)
d.transactions.forEach(function(item,index)
{
if (item.cramt > 0) {
filteredData.push(item);
}
});
return filteredData[0];
}
});
这是期望值
it('should return transactions where credit is positive', function() {
var jsonData = [{
"transactions": [{
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
}, {
"date": "1/1/2002",
"desc": "Transaction",
"cramt": 110,
"dbamt": 10
}]
}];
var filteredRecords = FilterService(jsonData[0]);
expect(filteredRecords).toEqual({
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
} );
});
这是Plunker
我正在尝试创建 angular 服务,但出现错误。这是服务:
var app = angular.module('plunker', []);
// Filter Service that returns records with crdamt positive:
app.factory('FilterService', function() {
return function(d) {
var filteredData = [];
console.log(d);
d.forEach(function(item)
{
if (item.cramt > 0) {
filteredData.push(item);
}
});
return filteredData;
}
});
然而在我的单元测试中我们得到:
it('should return transactions where credit is positive', function() {
var jsonData = {
"transactions": [{
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
}, {
"date": "1/1/2002",
"desc": "Transaction",
"cramt": 110,
"dbamt": 10
}]
};
var filteredRecords = FilterService(jsonData);
expect(filteredRecords).toEqual({
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
});
});
为什么会出现错误:
TypeError: d.forEach is not a function
试试吧。我期待变量 d
作为数组。
angular.forEach(d, function(item){
if (item.cramt > 0) {
filteredData.push(item);
}
});
您没有为 angular js 的 forEach
函数使用正确的语法。请参考此 angular.forEach 指令
forEach
方法在 arrays
上可用。
查看您的 jsonData
,您可以这样做:
app.factory('FilterService', function() {
return function(data) {
var filteredData = [];
console.log(data.transactions);
data.transactions.forEach(function(item)
{
if (item.cramt > 0) {
filteredData.push(item);
}
});
return filteredData;
}
});
P.S: 请阅读错误信息。它清楚地表明 d.forEach
不是函数。这就像尝试定义一个对象:
var person = {
'name':'Paul'
};
并尝试访问 person.height()
。 height
不是 person
对象的 属性,您正在尝试访问 undefined property as a function
.
您的测试试图过滤整个对象而不是事务数组。
var filteredRecords = FilterService(jsonData);
expect(filteredRecords).toEqual({
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
});
应该是
var filteredRecords = FilterService(jsonData.transactions);
expect(filteredRecords).toEqual([{
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
}]);
请查看更新后的 plnkr。 forEach 仅用于数组,而您的 'd' returns 是一个对象。
以下是对 plnkr 的link:
``http://plnkr.co/edit/o65e0xEsBiW0jpawhGse?p=preview
你可以这样定义过滤器。
app.factory('FilterService', function() {
return function(d) {
var filteredData = [];
var boolDataISFound = false;
console.log(d.transactions)
d.transactions.forEach(function(item,index)
{
if (item.cramt > 0) {
filteredData.push(item);
}
});
return filteredData[0];
}
});
这是期望值
it('should return transactions where credit is positive', function() {
var jsonData = [{
"transactions": [{
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
}, {
"date": "1/1/2002",
"desc": "Transaction",
"cramt": 110,
"dbamt": 10
}]
}];
var filteredRecords = FilterService(jsonData[0]);
expect(filteredRecords).toEqual({
"date": "1/1/2000",
"desc": "Purchase",
"cramt": 50,
"dbamt": 0
} );
});
这是Plunker