我有两种自定义类型Board
和Tile
。两者都需要EJSON
兼容。但是,Board
包含Tile
s的二维数组:
function Board(size) {
this.tiles = [];
for (var row = 0; row < size; row++) {
this.tiles[row] = [];
for (var col = 0; col < size; col++) {
this.tiles[row][col] = new Tile(row, col);
}
}
/* ... */
}
我的问题是关于toJSONValue
上的Board
方法。我是否需要显式转换嵌套的Tile
,如下所示:
Board.prototype.toJSONValue = function() {
var value = {};
value.tiles = _.map(this.tiles, function(row) {
return _.map(row, function(tile) {
return tile.toJSONValue();
});
});
return value;
};
或者嵌套的EJSON
类型会自动转换,允许我这样做:
Board.prototype.toJSONValue = function() {
return { tiles: this.tiles };
};
我怀疑第一种方法会导致我的Tile
个对象被视为普通对象,而不是使用我为它们定义的EJSON
接口。但第二种方式似乎是对toJSONValue
方法的无效使用。这让我想知道是否可以使用EJSON
嵌套自定义类型?
答案 0 :(得分:0)
JSON.stringify不仅适用于数组,也适用于数组数组。例如,使用JavaScript控制台演示:
所以在你的情况下,你的最后一个函数,只有单行返回,应该工作。不是吗?
另见this article;基本上要创建自定义EJSON类型,您需要定义一种将数据表示为标准JSON可序列化类型(普通对象,数组等)的方法。您的数组数组已经是兼容的JSON可序列化类型,因此它应该按原样运行。