Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确地迭代结构_Javascript_Screeps - Fatal编程技术网

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。