我循环遍历一个对象(我也尝试过一个数组)并构建一个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
谢谢
答案 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则会逐个浏览列表。新问题现在非常缓慢。