我有一个由我的脚本创建的对象数组,我正在尝试将该数组复制到一个新数组中,然后使用以下函数将其存储在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.
ScriptDb是否存在存储数组的问题?在此先感谢您的帮助。
答案 0 :(得分:6)
正如@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
从保存的对象中提取数组,loaded1
和loaded2
都与源数组arr
相同。
答案 1 :(得分:1)
ScriptDb
仅存储地图对象。但是,您可以存储包含数组的地图!
您可以使用db.saveBatch
在一次通话中使用数组保存多个对象。