保持列表node.js

时间:2015-10-16 07:42:16

标签: javascript node.js mongodb

我循环遍历一个对象(我也尝试过一个数组)并构建一个url列表。我试图枚举使用for ... in和迭代使用for但我一直在丢失命令。

 var Model = require('./model');
        var Scraper = require('./scraper');
        var Pages = [];
        function generateUrls(limit) {
          var url = 'http://www.weatheronline.co.uk/SouthAfrica/';
          var urls = [];

          Cities = {
    'Windhoek'  : 'Windhoek',
    'GraaffReinet' : 'GraaffReinet',
    'Queenstown'  : 'Queenstown',
    'Bhisho'  : 'Bhisho',
};
    };

      for (City in Cities) {
        urls.push(url + Cities[City]);
      }
      return urls;
    }
    // store all urls in a global variable  
    Pages = generateUrls();
    function wizard() {
      // if the Pages array is empty, we are Done!!
      if (!Pages.length) {
        return console.log('Done!!!!');
      }

我如何保留订单。在我刮掉一些天气数据后,我在localhost上显示了一个数据表。我将node.js与mongo,express和jade一起使用。

以下是创建表的玉代码。

doctype html
html
  body
    table(style='width:100%')
      tr
        th City
        th Min
        th Max Day 1
        th Max Day 2
        th Max Day 3

      each city, i in Listings
       tr
        td 
         span= city.city
        td 
         span= city.min
        td 
         span= city.max
        td 
         span= city.maxday2
        td 
         span= city.maxday3

谢谢

2 个答案:

答案 0 :(得分:1)

请务必阅读以下评论,因为其中包含相关信息!!

对于in循环,不要保证它们会以0到n的方式遍历对象。来自here的引用:

  

for ... in语句迭代了一个的可枚举属性   对象,以任意顺序。

我最近遇到了类似的问题,我通过在对象中包含一串键的字符串来解决它,这些字符串描述了我想要迭代对象的顺序。所以当我想迭代对象时我只是使用for循环迭代数组,然后使用obj [key]访问键。

这有两个缺点,首先我必须编写代码以保持obj和数组同步,所以当事情被添加到对象时我需要代码来更新数组。此外,我必须确保在循环中包含一个hasOwnProperty检查,以确保我的数组中充满了垃圾密钥。

它可能不是您正在寻找的解决方案,也可能不是您可以在您的方案中实施的解决方案,但它确实对我有用。祝你好运!

[编辑]以防万一我不清楚这是一个代码示例:

var obj = { 
    Test1: 1,
    Test3: 3,
    Test2: 2,
    propNames: ['Test1', 'Test2', 'Test3']
};

for(var i = 0; i < obj.propNames.length; i++) {
    if (!obj.hasOwnProperty(obj.propNames[i])) continue;

    console.log(obj.propNames[i] + ": " + obj[obj.propNames[i]]);
}

// OUTPUT
// Test1: 1
// Test2: 2
// Test3: 3

答案 1 :(得分:0)

我发现了问题......这就产生了一个新问题。但我可以忍受新问题。我在原始问题中未发布的一段代码是......

var numberOfParallelRequests = 20;
    for (var i = 0; i < numberOfParallelRequests; i++) {
      wizard();
    }

这就是问题所在。它以任何顺序同时发出20个请求。如果我将它设为1则会逐个浏览列表。新问题现在非常缓慢。