【问题标题】:use an array to get objects names?使用数组获取对象名称?
【发布时间】:2018-03-29 02:14:04
【问题描述】:

我这里有很多问题,所以让我先解释一下。 我想检查用户是否对对象中的每个项目都有足够的积分,然后检查用户是否已达到该项目的最高级别,并相应地在 HTML 中写入信息。为简化起见,代码如下所示:

var player = { 
     points: 0, 
     lv: { item1: 1, item2: 3, ... , item9: 4 },
     maxLv: { item1: 10, item2: 15, ... , item9: 40 }
}
var names = [
     "item1", "item2", ... , "item9"
]

现在在删除点和设置掌握的函数中是我要进行此检查的函数,我想有一个 for 循环,如下所示:

for(i = 0; i < 9; i ++) {
     if(player.points < 0 || player.lv[names[i]] ...

让我停在这里。 player.lv[names[i]] 不起作用。但是[names[i]]的控制台日志返回item1,item2,就好了,所以player.lv[names[3]]应该返回player.lv.item3。由于某种原因,它没有。

for(i = 0; i < 9; i ++) {
     if(player.points < 0 || player.lv[names[i]] < player.maxLv[names[i]]) {
          document.getElementById(names[i] + "click").innerHTML = "Not enough points";
     }
     else(player.Lv[names[i]] >= player.maxLv[names[i]]) {
          document.getElementById(names[i] + "click").innerHTML = "Maxed";
     }
}

为什么我的方法不起作用?一段时间以来,我一直在为此头疼…… 谢谢!

【问题讨论】:

  • 如果您尝试player.lv[i] 会怎样?您可以通过索引号从数组中获取项目。
  • 如何在需求中定义足够多的点?
  • 有一个包含最大级别的对象。 player.maxLv
  • Caaris 但我需要获得 player.lv.name1、player.lv.name2、player.lv[i] 会返回 player.lv.1 等...
  • else(player.Lv[names[i]] &gt;= player.maxLv[names[i]]) 应该抛出语法错误

标签: javascript html arrays object for-loop


【解决方案1】:

这里有语法错误:

else(player.lv[names[i]] >= player.maxLv[names[i]]) {

你不能有一个带有条件的else,它应该是else if

else if (player.lv[names[i]] >= player.maxLv[names[i]]) {

演示:

var player = { 
     points: 0, 
     lv: { item1: 1, item2: 3, item3: 4 },
     maxLv: { item1: 10, item2: 15 , item3: 40 }
};
var names = [
     "item1", "item2" , "item3"
];

for(var i = 0; i < 2; i++) {
     if(player.points < 0 || player.lv[names[i]] < player.maxLv[names[i]]) {
          document.getElementById(names[i] + "click").innerHTML = "Not enough points";
     }
     else if(player.lv[names[i]] >= player.maxLv[names[i]]) {
          document.getElementById(names[i] + "click").innerHTML = "Maxed";
     }
}
<div id="item1click"></div>
<div id="item2click"></div>
<div id="item3click"></div>

您的代码中的其他所有内容似乎都可以正常工作。

【讨论】:

  • 感谢您的回复。当我检查时确实有一个错误,所以我通过始终设置为“没有足够的点”或“单击以了解”用户是否有/或没有任何点来使其工作,然后在 for 循环中我检查了每次查看是否 maxed 将“Maxed”插入 HTML。
  • 另外,player.lv[names[i]] 需要像: player.lv[names[i].toString()] - 为了返回正确的值。
  • @MiloSx7 不错!很高兴为您提供帮助!
猜你喜欢
  • 2022-11-05
  • 1970-01-01
  • 2022-10-19
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
相关资源
最近更新 更多