错误:未定义 .lenth 属性
ERROR : .lenth property is not defined?
var model =
{
numShips:3,
boardSize:7,
shipLength:3,
shipSunk:0,
ships:[
{
locations: ["10","20","30"],
hits : ["hit","","hit"]
},
{
locations:["20","21","22"],
hits:["hit","",""]
},
{
locations:["33","34","35"],
hits:["hit","hit","hit"]
}
],
fire:function(guess)
{
for(var i=0;i<model.ships.length;i++)
{
for(var j=0;j<model.ships.locations.length;j++)
{
if(guess==(model.ships[i].locations[j]))
{
model.ships[i].hits[j]="hit";
console.log(model.ships[i].hits[j]);
}
}
}
}
};
model.fire(21);
我只想检查我通过猜测传递的值是否等于位置数组的任何值,然后如果有,那么我只会更新其相应的命中数组并将该位置标记为命中。但这给了我错误,例如未定义 .length 属性。你能帮我吗?
在第二个 for 循环中,您希望从第一个 for 循环迭代船舶的位置。您需要按索引访问它:
for(var j=0;j<model.ships[i].locations.length;j++) ...
// -----------------------^
正如我已经评论过的,ships
是一个数组,你必须循环它并检查currentIteration.location.length
您无需在locations
上使用循环来匹配。您可以使用array.indexOf()
获取索引并使用item.hits[index]
你可以尝试这样的事情:
var model = {
numShips: 3,
boardSize: 7,
shipLength: 3,
shipSunk: 0,
ships: [{
locations: ["10", "20", "30"],
hits: ["hit", "", "hit"]
}, {
locations: ["20", "21", "22"],
hits: ["hit", "test", ""]
}, {
locations: ["33", "34", "35"],
hits: ["hit", "hit", "hit"]
}],
fire: function(guess) {
model.ships.forEach(function(item) {
var _index = item.locations.indexOf(guess.toString());
if(_index>=0){
console.log(item.hits[_index])
}
})
}
};
model.fire(21);
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在选项卡上定义属性'的主窗口对象
- 锚点元素的href属性自动更改
- jQuery最近父级的数据属性选择器
- 错误:未定义 .lenth 属性