繁体   English   中英

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

[英]for loop doesn't work as I expected

for循环只返回0作为cantidad值,我认为应该返回2由于facturas有2x pagado。

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

鉴于其他答案已经解决了您的特定问题,我将提供一些有关如何改进代码的输入:

你忘了申报所有的变数。 省略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

您正在调用一个函数,每次都将count重置为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关键字在要使用它们的函数范围内声明所有变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM