Javascript 如何访问[“X”、“X”、“O”、“O”、“O”]

Javascript 如何访问[“X”、“X”、“O”、“O”、“O”],javascript,object,prototype,Javascript,Object,Prototype,我的解决方案:大家好,我使用内部for循环来访问有效性数据,但我得到的错误是长度未定义。请有人帮我理解我如何访问这里的数据……或者我做错了什么 function Type(name, effectivenessData) { this.name = name; this.effectivenessData = effectivenessData; } var types = [ new Type("Fire", ["X", "X", "O", "", "O"]),

我的解决方案:大家好,我使用内部for循环来访问有效性数据,但我得到的错误是长度未定义。请有人帮我理解我如何访问这里的数据……或者我做错了什么

function Type(name, effectivenessData) {
    this.name = name;
    this.effectivenessData = effectivenessData;
}

var types = [
    new Type("Fire", ["X", "X", "O", "", "O"]),
    new Type("Water", ["O", "X", "X", "", ""]),
    new Type("Grass", ["X", "O", "X", "", ""]),
    new Type("Electric", ["", "O", "X", "X", ""]),
    new Type("Ice", ["X", "X", "O", "", "X"])
];

var getTypes = function getTypeNames() {
    return types.map(t => t.name);
}
for(var i=0;i
您应该使用
getTypes()[i]
而不是
getTypes[i]
,因为它是一个函数。

看起来您试图在一个循环中打印类型的名称,在另一个循环中打印有效数据。您试图索引到
getTypes
,就像它是一个数组一样,但它是一个不支持此类操作的函数。使用
getTypes
检索数组,然后在数组上调用
forEach
以迭代其元素:

函数类型(名称、有效性数据){
this.name=名称;
this.effectivenessData=effectivenessData;
}
变量类型=[
新类型(“火“,[“X”,“X”,“O”,“O”,“O”)),
新类型(“水“,[“O”,“X”,“X”,“,”,”),
新类型(“草”、[“X”、“O”、“X”、“”、“”]),
新型号(“电动”,“O”,“X”,“X”,“X”,“X”)),
新类型(“Ice”,“X”,“O”,“X”,“X”)
];
var getTypes=函数(){
返回类型.map(t=>t.name);
};
getTypes().forEach(e=>console.log(e));
types.forEach(e=>console.log(e.effectivenessData));
//或者,使用传统循环:
for(设i=0;i}
您可以使用类似的方法循环:

for (var i =0; i < getTypes.length; i++) {
    console.log(getTypes[i].toString());

    for(var j=0; j< getTypes[i].effectivenessData; j++) {
console.log(getTypes[i].effectivenessData.[j]) // When I console log to check the data I get length undefined 
}
}
函数类型(名称、有效性数据){
this.name=名称;
this.effectivenessData=effectivenessData;
}
变量类型=[
新类型(“火“,[“X”,“X”,“O”,“O”,“O”)),
新类型(“水“,[“O”,“X”,“X”,“,”,”),
新类型(“草”、[“X”、“O”、“X”、“”、“”]),
新型号(“电动”,“O”,“X”,“X”,“X”,“X”)),
新类型(“Ice”,“X”,“O”,“X”,“X”)
];
对于(变量i=0;i
必须调用
getTypes
,例如
getTypes()
,其返回值应存储在
var
中,以便迭代代码更干净。

如果
getTypes
是一个函数,则不能使用
[i]对其进行索引
或者像调用数组一样调用
length
。@ggorlen如果是这样,为什么我会在getTypes.length中获取长度和数据。length是火、水、草……我不明白。按原样运行代码会抛出一个
语法错误:意外标记[
。您看到了什么?请在控制台打印中的
有效性数据之后删除点(
)。不要使用
forEach(console.log)
,使用
forEach(x=>console.log(x))
我可以问一下你为什么建议这样做吗?这解释了为什么它在某些浏览器中会出现错误。但即使它工作,它也会打印额外的输出,因为
forEach()
将3个参数传递给回调:数组元素、数组索引和整个数组,因此每个参数都会被记录。啊,好的,明白了。
function Type(name, effectivenessData) {
   this.name = name;
   this.effectivenessData = effectivenessData;
}

var types = [
    new Type("Fire", ["X", "X", "O", "", "O"]),
    new Type("Water", ["O", "X", "X", "", ""]),
    new Type("Grass", ["X", "O", "X", "", ""]),
    new Type("Electric", ["", "O", "X", "X", ""]),
   new Type("Ice", ["X", "X", "O", "", "X"])
];

for(var i = 0; i < types.length; i++){
   console.log(types[i].effectivenessData)
};