我使用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 () {
};
请帮我解决问题-.-
答案 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
将导致true
或undefined
,因为isEmptyAt
仅在返回true
时返回值;在另一种情况下,它不会返回任何内容,调用它的结果是值undefined
。相反,我会在两种情况下都明确地返回一些东西:
isEmptyAt: function(x, y) {
return !this.table[x][y];
}
*从技术上讲,对于new Array(height)
,条目根本不会在 ;尽管数组的length
为height
,但在添加之前它根本没有任何条目。但是当你尝试检索一个条目时,你会得到值undefined
,所以为了简单起见,我稍微捏了一下这个解释。