for循环只返回0作为cantidad值,我认为应该返回2由于facturas有2x pagado。 Ty
facturas=["Mario:pagado","Vane:pagado","Velez:deuda"];
function extractNames(string){
end=string.indexOf(":");
return string.slice(0,end);
}
function countPaids(texto){
count=0;
start=texto.indexOf(":")+1;
if(texto.slice(start,texto.length)=="pagado"){
count++;}
return {cantidad:count};
}
for(i=0;i<facturas.length;i++){
factura=facturas[i];
for(factura=0;factura<facturas.length;factura++){
countPaids(facturas[factura]);
}
}
答案 0 :(得分:2)
鉴于其他答案已经解决了您的特定问题,我会就如何改进您的代码提供一些意见:
您忘了声明所有变量。当您省略var
关键字时,您的变量将变为隐式全局变量;你不想要这个。
我建议重新考虑您的数据结构。在JavaScript中,我们有数组和对象。存储信息的常用方法是集合,它只是对象的数组。这将提高代码的可读性,并且您可以使用本机JavaScript方法和您自己的帮助程序轻松地循环集合。例如:
// A collection
var facturas = [
{name: 'Mario', state: 'pagado'},
{name: 'Vane', state: 'pagado'},
{name: 'Velez', state: 'deuda'}
];
// Helpers to work with collections
var dot = function(s) {
return function(x) {
return x[s];
};
};
var eq = function(s) {
return function(x) {
return x == s;
};
};
// Example
var states = facturas.map(dot('state')); //=> ['pagado','pagado','deuda']
var totalPaid = states.filter(eq('pagado')).length; //=> 2
答案 1 :(得分:0)
您正在调用一个函数,每次都会将计数重置为0
。在你的循环中进行计数:
var facturas = ["Mario:pagado","Vane:pagado","Velez:deuda"];
function extractNames(string){
var end = string.indexOf(":");
return string.slice(0, end);
}
/* returns true if the string contains "pagado" after the ":" */
function isPaid(texto){
var start = texto.indexOf(":") + 1;
return texto.slice(start,texto.length) == "pagado";
}
var count = 0;
for(var factura = 0; factura < facturas.length; factura++){
count += isPaid(facturas[factura]);
}
// count == 2 here.
不要忘记使用var
关键字在要使用它们的函数范围内声明所有变量。