我被告知不要for...in在JavaScript中使用数组.为什么不?
你认为for in和for循环有很大的不同吗?您更喜欢使用什么样的"for"?为什么?
假设我们有一组关联数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
Run Code Online (Sandbox Code Playgroud)
所以我们可以迭代:
for (var i = 0; i < myArray.length; i++)
Run Code Online (Sandbox Code Playgroud)
和:
for (var i in myArray)
Run Code Online (Sandbox Code Playgroud)
我没有看到很大的不同.有任何性能问题吗?
我在Javascript中遇到了一个奇怪的行为.我明白了
"对象不支持此属性或方法"
removeAttribute以下代码中的函数异常:
var buttons = controlDiv.getElementsByTagName("button");
for ( var button in buttons )
button.removeAttribute('disabled');
Run Code Online (Sandbox Code Playgroud)
当我用以下代码更改代码时,问题消失了:
var buttons = controlDiv.getElementsByTagName("button");
for ( var i = 0; i < buttons.length; i++ )
buttons[i].removeAttribute('disabled');
Run Code Online (Sandbox Code Playgroud)
button里面有for...in什么价值?
在玩游戏screeps.com时,我想计算构建所需身体的成本.请参阅下面的我的尝试,cfg.bodybodypart数组在哪里,例如[Game.ATTACK, Game.MOVE, Game.WORK, Game.CARRY, Game.MOVE]:
var buildCost = 0;
for(var bodypart in cfg.body){
switch(bodypart){
case "MOVE":
case "CARRY":
buildCost+=50;
break;
case "WORK":
buildCost+=20;
break;
case "HEAL":
buildCost+=200;
break;
case "TOUGH":
buildCost+=20;
break;
case "ATTACK":
buildCost+=80;
break;
case "RANGED_ATTACK":
buildCost+=150;
break;
}
console.log(bodypart + " costs " + buildCost);
}
Run Code Online (Sandbox Code Playgroud)
打印bodypart到控制台时,它显示索引(0,1,2,3,...),buildCost保持为0.
成本和零件在Screeps页面上描述.
我希望find()函数true在找到'john'并停止迭代槽数时返回.或者,如果寻找名称,则返回false,比如说maria,这不在我们的任何对象中.我不明白我在这段代码中无法实现我所需要的东西?谢谢.
var array = [
{name:'paul',age:20},
{name:'john',age:30},
{name:'albert',age:40}
];
var find = function(arr){
arr.forEach(function(i){
if(i.name === 'john'){
console.log('found him');
return true;
} else {
console.log('not there');
return false;
}
});
};
find(array);
Run Code Online (Sandbox Code Playgroud)
我在这里看到了一些类似的问题,但我无法理解或理解我的问题的答案.显然我需要函数能够返回name值并同时返回true或false.
javascript ×5
arrays ×2
for-loop ×2
for-in-loop ×1
foreach ×1
if-statement ×1
iteration ×1
loops ×1
return ×1
screeps ×1