2015-06-19 68 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); });