2013-03-07 61 views
0

我有一個需要轉換爲二維數組的對象數組,因此我可以寫入Google電子表格,其中每個屬性都寫入一個單元格。我有下面的功能:將對象屬性存儲在二維數組中

​​

示例對象:

object { 
    name: John 
    phone: 555-5555 
    email: [email protected] 
} 

的問題是,而不是把屬性值在陣列元件(outputArray應該像[[John, 555-5555, [email protected]],[..., ..., ...]]其添加的屬性,以每個陣列元素。

回答

1

在你的函數的第一部分,

function objectsToArray(objects) { 
    var outPutArray = createArray(objects.length, objects[0].length); 

它看起來像我們假定你是objects已經是一個二維數組。我將假設objects是一個像這樣的對象的一維數組。 [{prop:value...},{...},{...}]

現在你想要做的是從這些數據生成2個數字指數。您需要確保2D數組的「第1列」對於所有對象都是相同的屬性。

所以你的第一個for循環應該超過屬性。此外,保持一個索引,讓你知道你在哪個數字屬性。

var j = 0; 
for (var prop in objects[0]) { 

然後你應該對所有對象進行循環。所以想法是,首先你要選擇「名稱」,然後遍歷所有對象,爲每個對象添加「名稱」字段到二維數組。

for (var i in objects) { 
    outPutArray[i][j] = objects[i][prop]; 
    } 
    j++; 
} 

我認爲你看到的主要問題是因爲你沒有使用數字指數。 (var j in objects[i]:這將j定義爲一個屬性,如「name」,而不是數字索引,就像您期待的那樣)。

+0

這正是我的問題,我沒有考慮使用單獨的計數器並反轉for循環。工作得很好,謝謝。 – 2013-03-07 06:00:37

+0

請注意,假設object [1]具有與object [0]相同的屬性。如果每個對象都不同,那麼我們手上就會有更多的麻煩。 ;-) – 2013-03-07 06:17:00

0

這裏有一種方法......

function myFunction() { 
    var objects = {}; 
    objects[0] = {"name": "John", "phone": "555-5555", "email": "[email protected]"}; 
    objects[1] = {"name": "Mary", "phone": "444-4444", "email": "[email protected]"}; 
    var outputArrary = objectsToArray(objects); 
    Logger.log(outputArrary); 
} 

function objectsToArray(objects) { 
    var outputArray = []; 
    for (var i in objects) 
    outputArray.push([objects[i].name, objects[i].phone, objects[i].email]); 
    return outputArray; 
} 
+0

這就是我最初的處理方式,但如果所有代碼的屬性都改變了,並且由於我可能不會永遠維護這個項目,我需要更動態的東西。 – 2013-03-07 06:01:43