2015-06-19 99 views
4

我想迭代发现结构,但我不知道有什么办法是最好的这一点。如何迭代结构正确

我已经试过这一个:

for (var ext in creep.room.find(FIND_MY_STRUCTURES, {filter: { structureType: STRUCTURE_EXTENSION }})){ 
    console.log(ext.energy); 
} 

,但它不工作。

所以现在我使用的作品的方法,但它看起来丑陋:

for(var i = 0; i < creep.room.find(FIND_MY_STRUCTURES, {filter: { structureType: STRUCTURE_EXTENSION }}).length; i++) { 
    var ext = creep.room.find(FIND_MY_STRUCTURES, {filter: { structureType: STRUCTURE_EXTENSION }})[i]; 
    console.log(ext.energy); 
} 

我不知道,也许这是涉及到JS的问题。我是js的全新手。你能为此提供建议吗?

回答

2

ext包含密钥,而不是结果的值。

所以我做了什么,是移动的结果跳出循环,把一个名为results变量。这样,我有一个变量在循环中引用。

那么怎么回事的是,因为在代码中ext被存储的关键,这是一个字符串类型值。它返回从字符串对象的结果,你正在做这样的事情"key".energy和返回值undefined,因为String对象不会有一个这样的关键。

所以这里下面是应该工作的代码:

var results = creep.room.find(FIND_MY_STRUCTURES, {filter: { structureType: STRUCTURE_EXTENSION }}); 
for (var ext in results){ 
    console.log(results[ext].energy); 
} 
+0

或者,可以使用Game.structures遍历自己的结构。这可能比使用函数标记为平均CPU的room.find()更快。 – Toolmaker

+0

嗯..我想深入研究这些事情......即使遍历Game.structures是一个较小的列表,扩展速率是线性的,代码执行得很快。此外,更多的我听到这些事情,更多的其实我更喜欢到)使用自己的代码或b)的需求,共创美好screeps API。 – avdg

0

不要忘记,你还可以使用Array.forEach功能和方向的功能符号!

creep.room.find(FIND_MY_STRUCTURES, { filter: { structureType: STRUCTURE_EXTENSION } }) 
    .forEach((ext) => { console.log(ext.energy); });