2013-02-22 48 views
1

我有一個由我的腳本創建的對象數組,我試圖將該數組複製到一個新數組中,然後使用以下函數將其存儲在scriptDb中:嘗試在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

'currentArray'中有什麼? – 2013-02-22 21:55:39

+0

currentArray是包含有關不同部門(名稱,#會員,每月訪問等)的信息和統計信息的對象數組。 – 2013-02-22 22:18:22

+1

只要確保不要嘗試存儲本機Date對象。這可能導致沉默和模棱兩可的錯誤。 – Jonathon 2013-02-24 07:48:43

回答

5

正如@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 
} 

這裏就是你會在調試器暫停看到:

Screenshot of debugger

注意,通過使用地圖標記data從保存的對象拉陣列,既loaded1loaded2是相同的到源陣列arr

+0

這正是我需要的,非常感謝你。用於調試器的 – 2013-02-24 07:19:53

+0

+1。我傾向於分散void(0),並添加/刪除中斷。 – Jonathon 2013-02-24 07:51:37

1

ScriptDb只存儲地圖對象。但是,您可以存儲包含數組的地圖!

您可以使用數組在一次調用中使用db.saveBatch保存多個對象。

+0

抱歉,我是新手,因此如何創建一個包含我想要存儲的數組的映射? 我在腳本的早些時候使用'db.saveBatch'來存儲電子表格中關於部門的原始數據。 – 2013-02-22 22:23:22

+1

你只需要定義一個像這樣的對象'var myObj = {array:YOUR_ARRAY,id:SOME_IDENTIFIER};'你在哪裏提供一些標識符,以便以後可以檢索它。那麼你可以只是'db.save(myObj);' – 2013-02-23 00:12:00

相關問題