如何获取console.log()上的表显示值?

时间:2017-05-17 06:42:31

标签: javascript arrays oop

我使用OOP javascript创建演示游戏Tic Tac Toe。但是我有问题,在桌子上获得附加值的值,然后在molten <- melt(world, id.vars = c("Country", "Year")) dcast(molten, Country ~ Year + variable) # Country 2015_Growth 2015_Unemployment 2015_Population 2016_Growth 2016_Unemployment 2016_Population 2017_Growth #1: A 2.0 8.3 40 4.0 8.1 42.0 4.5 #2: B 3.0 9.2 32 3.5 9.0 32.5 4.4 #3: C 2.5 9.1 30 3.7 9.0 31.0 4.3 #4: D 1.5 6.1 27 3.1 5.3 29.0 4.2 # 2017_Unemployment 2017_Population #1: 8.1 42.5 #2: 8.4 33.0 #3: 8.5 30.0 #4: 5.2 30.0

中显示表格

这是我的代码:

console.log();

我在这里遇到问题。我无法在桌上获得价值并检查isEmpty。

 /**
 * @constructor
 * @param {Number} width - dimension width for table
 * @param {Number} height - dimension height for table
 */


function Table(width, height) {
  this.table = new Array(height * width);
  this.width = width;
  this.height = height;
}

Table.prototype = {
  /**
   * Representation for get width of table
   */
  getWidth: function () {
    return this.width;
  },

  /**
   * Representation for get height of table
   */
  getHeight: function () {
    return this.height;
  },

  /**
   * Representation for get table array 2d
   */
  getTable: function () {
    var x = new Array(this.getHeight());
    for (var i = 0; i < this.getHeight(); i++) {
      x[i] = new Array(this.getWidth());
    };
  },

  /**
   * Representation for set position of table
   */
  setPosition: function (x, y, ch) {
    return this.table[x][y] = ch;
  },

这是console.log()中的功能打印显示。

  /**
   * Representation for get value detail at cell of table
   */
  getValueAt: function (x, y) {
    return this.table[x][y];
  },

  /**
   * Representation for check empty conditional
   */
  isEmptyAt: function (x, y) {
    if (!this.table[x][y])
      return true;
  },
};

/**
 * @constructor
 * @param {String} character - X or O
 */
function Player(name, ch) {
  this.name = name;
  this.ch = ch;
}

var Printer = function () {
};

请帮我解决问题-.-

1 个答案:

答案 0 :(得分:3)

您未正确初始化table。你这样做了:

this.table = new Array(height * width);

...但后来试图像这样使用它:

this.table[x][y];

要像这样使用它,你不仅需要一个数组,还需要一个数组数组(JavaScript相当于一个二维数组)。要初始化数组数组,请执行以下操作:

this.table = [];
for (var x = 0; x < width; ++x) {
    this.table[x] = new Array(y);
}

请注意,子数组中的条目(例如this.table[0][0])将为undefined *。如果这是你想要的(它适用于isEmptyAt),那很好。如果您希望它们具有不同的值,则需要填写:

this.table = [];
for (var x = 0; x < width; ++x) {
    this.table[x] = [];
    for (var y = 0; y < height; ++y) {
        this.table[x][y] = theValueGoesHere;
    }
}

另外:调用isEmptyAt将导致trueundefined,因为isEmptyAt仅在返回true时返回值;在另一种情况下,它不会返回任何内容,调用它的结果是值undefined。相反,我会在两种情况下都明确地返回一些东西:

isEmptyAt: function(x, y) {
    return !this.table[x][y];
}

*从技术上讲,对于new Array(height),条目根本不会在 ;尽管数组的lengthheight,但在添加之前它根本没有任何条目。但是当你尝试检索一个条目时,你会得到值undefined,所以为了简单起见,我稍微捏了一下这个解释。