2015-10-16 61 views
1

我正在循環一個對象(我也嘗試過使用數組)並構建一個url列表。我試圖枚舉使用for ...並重復使用,但我不斷失去命令。保持列表的順序node.js

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!!!!'); 
     } 

我該如何保持訂單。在我刮掉一些天氣數據後,我在本地主機上顯示數據表。我用mongo,express和jade來使用node.js。

這裏是創建表的玉代碼。

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 

謝謝

+0

我不明白你的意思是失去了訂單。什麼是你的Jade代碼中的「清單」?無法在node.js代碼中找到它。 – Danmoreng

+0

失去訂單意味着什麼?這不是很清楚。 –

+0

「列表」是Mongo系列。就像扎克布拉迪回答的順序是任意的。你會期望看到溫得和克,格拉夫裏內特,皇后鎮,比索。但它以隨機順序返回。 – Gvkeyser

回答

1

請務必閱讀下面以及評論,因爲在他們的相關信息!

對於in循環並不能保證它們將遍歷索引0中的對象到某種方式。從here引述:

的了... 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

另一種方法是使用正常的循環,如果你反覆遍歷數組。在他的情況下,他表示他也嘗試過一個陣列,但我想他是這樣做的... ...在循環中也是如此。從他擁有的當前數據來看,城市並不一定是一個對象,而是一個數組會變得更簡單。然後你不需要額外的數組來給這些屬性下一個命令。 – Danmoreng

+0

這是真的@ user2415266,但我敢肯定,Gvkeyser不是遍歷數組。他開始說「我正在循環一個物體......」 –

+0

我剛剛編輯了我的評論,並且這個句子基本上是您評論的答案^^ – Danmoreng

0

我發現它創建了一個新的問題,這個問題......。但我可以忍受這個新問題。一段代碼,我沒有發佈在我原來的問題是...

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

這就是問題所在。它以任何順序同時發出20個請求。如果我把它做成1,那麼它會一個一個地通過列表。新問題現在非常緩慢。

相關問題