我正在尝试使用不同的字符来完成这种演变,并且它的“ if(perTable。+(“ per” + per + 1)+ .allele ==“ black”)“部分存在问题码。它引发了意外的标识符错误,而我认为一切都使用了正确的语法。我是编码新手,对此不胜感激。
我尝试通过在perTable
,(“ per” + per + 1)位之间以及.allele之前添加一些空格来扩展加号,但这似乎也无济于事。 / p>
代码:
var per = 0;
var perTable = {
per1: {
allele: "green",
number: "1",
living:"1",
},
per2: {
allele: "black",
number: "2",
living:"1",
}
};
// console.log(perTable.per2.number)
for (var i = 0; i < Object.keys(perTable).length; i++){
// console.log("per"+(per + 1))
if (perTable. + ("per" + per + 1) + .allele == "black"){
console.log("okay");
} else {
console.log("yikes");
}
per++;
};
我希望它在控制台中记录一次“ okay”和“ yikes”,但是相反,我在第19行和字母16处获得了意外的标识符。如果您能帮上忙,那就太好了!
答案 0 :(得分:1)
这不是正确的javascript语法。但是有一种方法可以动态获取子元素。
您将希望使用.
来访问它,而不是用点[]
来访问它,就像这样:
if (perTable["per" + (per + 1)].allele == "black"){
此符号将使您可以动态访问子元素。
请注意,我在“每+1”周围添加了括号,因为由于您要添加字符串和整数,因此Javascript会合并per
和1
的stirng表示形式,表示您将拥有per01
和per11
而不是per1
和per2
答案 1 :(得分:1)
您无法使用dot notation, use bracket notation访问动态属性。
现在,您的数据结构本身就存在缺陷。您要按索引访问它,然后使用数组,或者需要键-值对,然后不要尝试在循环中编写键。而是使用Object.keys
,Object.values
或Object.entries
与它们一起使用:
for(const obj of Object.values(perTable)) {
if(obj.allele) { /*...*/ } else { /*...*/ }
}
答案 2 :(得分:1)
我相信第18行引起了错误:
perTable. + ("per" + per + 1) + .allele
有two ways可以访问JavaScript对象中的属性:点符号和括号符号
var obj = {a: 1, b: 2}
// Dot notation
console.log(obj.a) // 1
// Bracket notation
console.log(obj['a']) // 1
在这种情况下,括号表示法会更好
perTable["per" + (per + 1)].allele
这是完整的代码段!
var per = 0;
var perTable = {
per1: {
allele: "green",
number: "1",
living:"1",
},
per2: {
allele: "black",
number: "2",
living:"1",
}
};
// console.log(perTable.per2.number)
for (var i = 0; i < Object.keys(perTable).length; i++){
// console.log("per"+(per + 1))
if (perTable["per" + (per + 1)].allele == "black"){
console.log("okay");
} else {
console.log("yikes");
}
per++;
};
答案 3 :(得分:-2)
浏览器最有可能抱怨此问题:perTable. + ("per"...
,因为此处的.
毫无意义。似乎您正在尝试根据变量的值构建对象键。执行此操作时,您将无法再使用点符号。相反,您需要使用括号符号:
perTable["per" + per + 1]
请注意,在这种情况下,将长表达式分成较小的赋值语句通常会很有帮助。例如(使用您的原始尝试):
key = "per" + per + 1;
allele = perTable. + key + .allele
if (allele == "black") {
...
这有助于显示问题出在哪里,因为错误将指向allele =
行。另外,当您稍后再查看时,它使代码更易于阅读。