javascript - 使用嵌套的 EJSON 类型编写 toJSONValue 方法?

标签 javascript meteor

我有两种自定义类型,BoardTile。两者都需要与 EJSON 兼容。但是,Board 包含 Tile 的二维数组:

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);
    }
  }
  /* ... */
}

我的问题是关于 Board 上的 toJSONValue 方法。我是否需要像这样显式转换嵌套的 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 接口(interface)。但第二种方式似乎是对 toJSONValue 方法的无效使用。这让我想知道是否可以使用 EJSON 嵌套自定义类型?

最佳答案

JSON.stringify 不仅适用于数组,也适用于数组的数组。例如使用JavaScript控制台演示:

JavaScript console screenshot

所以在你的情况下,你的最后一个函数,只有一行返回,应该可以工作。不是吗?

另见 this article ;基本上要创建自定义 EJSON 类型,您需要定义一种方法来将您的数据表示为标准的 JSON 可序列化类型(普通对象、数组等)。您的数组数组已经是兼容的 JSON 可序列化类型,因此它应该按原样工作。

关于javascript - 使用嵌套的 EJSON 类型编写 toJSONValue 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20092963/

相关文章:

javascript - 用点扩展一个字典键作为另一个字典

javascript - 使用javascript更改src,仅更改一组图像中的一个

javascript - CryptoJS javascript AES-128,欧洲央行加密/解密

javascript - 在 meteor 中重新启动服务器之前不会创建站点地图

javascript - 在 Meteor 中显示 Facebook 头像

javascript - 如何使用 lodash 从现有的对象数组生成新的对象数组

javascript - 检查输入是否具有特定值

meteor - 如何通过代理制作 meteor 服务器 HTTP.call?

javascript - 如何将带有objectId的二进制数据添加到mongoDB中?

Meteor 应用程序 : Intitial loading >1min, 7.4M,800 个请求