javascript

时间:2019-05-14 21:28:55

标签: javascript object

我正在尝试使用不同的字符来完成这种演变,并且它的“ 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处获得了意外的标识符。如果您能帮上忙,那就太好了!

4 个答案:

答案 0 :(得分:1)

这不是正确的javascript语法。但是有一种方法可以动态获取子元素。

您将希望使用.来访问它,而不是用点[]来访问它,就像这样:

if (perTable["per" + (per + 1)].allele == "black"){

此符号将使您可以动态访问子元素。

请注意,我在“每+1”周围添加了括号,因为由于您要添加字符串和整数,因此Javascript会合并per1的stirng表示形式,表示您将拥有per01per11而不是per1per2

答案 1 :(得分:1)

您无法使用dot notation, use bracket notation访问动态属性。

现在,您的数据结构本身就存在缺陷。您要按索引访问它,然后使用数组,或者需要键-值对,然后不要尝试在循环中编写键。而是使用Object.keysObject.valuesObject.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 =行。另外,当您稍后再查看时,它使代码更易于阅读。