忽略.each()循环中空值的最佳做法?

时间:2015-01-16 04:56:07

标签: javascript jquery

我有这段代码:

self.list.push(values);
for (var i = 1; i < $(elemthree, this).text().match(/(\d+)(?!.*\d)/g, '$1'); i++) {
    self.list.push(values); 
}

它遍历站点上的一堆数据,并在必要时多次输出某些元素的数组值。这是在多个站点(10 +)上运行。

然而,特别是一个站点在我需要的30行之后返回2500多个空行数据,一旦数组完成并由外部程序解析,就会产生TON处理时间。我通过在下面包含这段代码来修复它:

if (values != '') {
    self.list.push(values);
    for (var i = 1; i < $(elemthree, this).text().match(/(\d+)(?!.*\d)/g, '$1'); i++) {
        self.list.push(values); 
    }
}

这可以按预期工作,并且不会将空行添加到列表中 - 并且对于将来可能要解析其数据的任何站点而言似乎也是未来的证明。但对我来说这感觉很糟糕。我是否以正确的方式解决了这个问题?有没有更好的方法来做到这一点?

(之前有人提到我有一个循环从i = 1开始而不是i = 0并删除第一个self.list.push - 这是故意的,因为一些解析的网站没有提到数量而是只是列出我需要的价值一次。)

2 个答案:

答案 0 :(得分:1)

没关系。除了!= ''等于TRUE之外还有许多其他不良值。

根据你想要的而不是想要的东西来思考。

您需要一个长度大于零的字符串。使用它。

if (values.length > 0)

答案 1 :(得分:0)

//检查它是否为空

if (!values) {
  self.list.push(values);
  for (var i = 1; i < $(elemthree, this).text().match(/(\d+)(?!.*\d)/g, '$1'); i++) {
    self.list.push(values); 
  }
}

//检查它是空的还是空格

if (!values.trim()) {
  self.list.push(values);
  for (var i = 1; i < $(elemthree, this).text().match(/(\d+)(?!.*\d)/g, '$1'); i++) {
    self.list.push(values); 
  }  
}