尝试存储到ScriptDb数组时出错(Error when trying to store an a

2019-07-20 09:47发布

我有一个是通过我的脚本创建的对象的数组,我想该数组复制到一个新的数组,然后使用下面的函数将其存储到ScriptDb:

function copyAndStore (currentArray) {
  var db = ScriptDb.getMyDb();
  var copyArray = [];
  for (var i in currentArray) {
    copyArray.push(currentArray[i]);
  }
  var id = db.save(copyArray);
  return id;
}

它复制一切正常,但是当它到达var id = db.save(copyArray); 我得到的错误: Invalid argument. Expected a javascript map object. Invalid argument. Expected a javascript map object.

是否ScriptDb中有存储阵列的问题是什么? 在此先感谢您的帮助。

Answer 1:

作为@Thomas说,你可以保存在地图对象的数组。

你不需要把一个对象插入到一个ScriptDb之前执行复制操作,无论是。 您可以保存您的阵列通过简单db.save({myArray}) ,并记住ID。

下面是一些简约的代码来演示。 我展示两种方式来获取已保存的阵列 - 一个由ID,这似乎是你计划的方式,但也使用查询“键”值的第二途径。 如果您希望在检索你的代码的运行之后的ScriptDb中的内容,这种方法不需要以某种方式记住存储阵列的ID。

function saveArray (currentArray) {
  var db = ScriptDb.getMyDb();
  return db.save({type: "savedArray", data:currentArray}).getId();
}

function loadArrayById (id) {
  var db = ScriptDb.getMyDb();
  return db.load(id).data;
}

function loadArrayByType () {
  var db = ScriptDb.getMyDb();
  var result = db.query({type: "savedArray"});
  if (result.hasNext()) {
    return result.next().data;
  }
  else {
    return [];
  }
}

function test() {
  var arr = ['this','is','a','test'];
  var savedId = saveArray( arr );
  var loaded1 = loadArrayById( savedId );
  var loaded2 = loadArrayByType();
  debugger;  // pause if running debugger
}

下面是你在调试器暂停看到:

需要注意的是通过使用地图标签data拉从所保存的对象阵列,既loaded1loaded2是相同的源阵列arr



Answer 2:

ScriptDb只存储映射对象。 然而,你可以存储地图包含数组!

您可以使用数组保存在使用单个呼叫几个对象db.saveBatch



文章来源: Error when trying to store an array in ScriptDb