Javascript 如何正确地迭代结构
我想迭代找到的结构,但我不知道什么方法是最好的 我试过这个:Javascript 如何正确地迭代结构,javascript,screeps,Javascript,Screeps,我想迭代找到的结构,但我不知道什么方法是最好的 我试过这个: 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_STR
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);
}
for(var i=0;i
我不确定,也许这是一个关于js的问题。我对js完全是个新手。您能给我一些建议吗?
ext
包含键,而不是结果的值
因此,我所做的是将结果移出循环,并放入一个名为results
的变量中。这样,我在循环中有一个变量要引用
这是因为代码中的ext
正在存储键,这是一个字符串类型的值。它从字符串对象返回结果,您正在执行类似于“key.energy
的操作,并且返回值未定义的
,因为字符串对象没有这样的键
因此,下面是应该工作的代码:
var results = creep.room.find(FIND_MY_STRUCTURES, {filter: { structureType: STRUCTURE_EXTENSION }});
for (var ext in results){
console.log(results[ext].energy);
}
不要忘记,您还可以使用
Array.forEach
函数和箭头函数表示法
creep.room.find(FIND_MY_STRUCTURES, { filter: { structureType: STRUCTURE_EXTENSION } })
.forEach((ext) => { console.log(ext.energy); });
或者,可以使用Game.structures来迭代自己的结构。它可能比使用function.Hmm执行room.find()更快,后者被标记为平均CPU。。我想深入研究这些事情。。。尽管遍历Game.structures是一个较小的列表,但扩展速率是线性的,代码执行速度非常快。而且,我听到的关于这些事情越多,我就越倾向于a)使用自己的代码或b)要求更好的screepsapi。