for循环不能像我预期的那样工作

时间:2014-01-16 00:46:12

标签: javascript

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]);
  }
}

2 个答案:

答案 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关键字在要使用它们的函数范围内声明所有变量。