跨数组访问对象值

时间:2019-06-02 19:38:26

标签: javascript

我正在尝试访问数组中的对象值,但是每次都会出现未定义的对象值。如何让数组“ terrain”使用“ Dirt”对象变量(例如SpawnChance)?

var terrain = new Array("Dirt1", "Dirt2", "Dirt3");

var Dirt1 = new Object();
Dirt1.Name = 'Dirt1';
Dirt1.Level = '1';
Dirt1.SpawnChance = '70';

var Dirt2 = new Object();
Dirt2.Name = 'Dirt2';
Dirt2.Level = '1';
Dirt2.SpawnChance = '15';

var Dirt3 = new Object();
Dirt3.Name = 'Dirt3';
Dirt3.Level = '1';
Dirt3.SpawnChance = '10';

if ($("#startingblock").hasClass("Dirt1")) {

  var blockcount = (Math.floor(Math.random() * 20) + 1) * 2;
  var blockcount = blockcount * blockcount;

  var i = 0;
  while (i < blockcount) {

    var randomizer = (Math.floor(Math.random() * 100) + 1);

    var terraintypes = terrain.length;

    var terrainrandoms = (Math.floor(Math.random() * terraintypes) + 0);

    var newrandomterrain = (terrain[terrainrandoms]);

    var randomterrainspawnchance = newrandomterrain.SpawnChance;

    terrain.push(newrandomterrain);


    alert(newrandomterrain);

    i++;



  }

1 个答案:

答案 0 :(得分:1)

您正在尝试访问字符串上的SpawnChance方法-例如。 "Dirt1"。您需要对象本身-这就是问题的根源:

var terrain = new Array("Dirt1", "Dirt2", "Dirt3");

只需改成这样:

var terrain = new Array(Dirt1, Dirt2, Dirt3);

(或更妙的是:

var terrain = [Dirt1, Dirt2, Dirt3]

没有理由使用Array构造函数而不是原义形式)

请注意,您必须将其移动到代码中比这些对象的定义晚的位置。