2011-11-16 38 views
0

我正在解析具有已知重複結構的文檔。有一個標題(1行),一個子標題(1行)和一個內容區域(未知行數)。 爲文檔中的各個項目的格式如下所示:在Javascript中使用文字符號插入對象到數組中

 
========================= 
     Head Text 
========================= 
     SubHead Text 
========================= 
Content Text Line 1 
Content Text Line 2 
... 
Content Text Line 8 

我想創建包含每個部分對象的數組。 是這樣的:

var item = []; 

items[0] = { 
    head: "head1 text", 
    subHead: "subHead1 text", 
    content: "content1 text"}; 
items[1] = { 
    head: "head2 text", 
    subHead: "subHead2 text", 
    content: "content2 text"}; 

我無法高效地遍歷文檔和動態地添加每個對象進入陣列。我在第2節中得到一個錯誤,告訴我「頁面爲空或不是對象」。

var count = 0; 
while(!stream.AtEndOfStream){ 
page[count] = stream.ReadLine(); 
count++; 
} 

var item = [{}]; 

var section = 0; 

var i = 0, k = 0; 
while (i < page.length) { 
    if (~page[i].indexOf("=====")) { 
     if(section == 0) { 
      item[k].head = page[i+1]; 
      section++; 
     } else  
     if (section == 1) { 
      item[k].subHead1 = page[i+1]; 
      section++; 
      i++; 
     } else 
     if (section == 2) { 
      var j = i+1; 
      while(!~page[j].indexOf("=====")) { 
       item[k].content += page[j] + "\n"; 
       j++; 
      } 
       section = 0; 
       k++; 
     }  
    } 
    i++; 
} 
+0

在您的代碼示例中未聲明「頁面」。 –

+0

對不起,我應該補充說「page」是一個字符串數組,ala page [0] =「一個字符串」; – SharpBarb

回答

0

更改此:

var item = [{}]; 

這樣:

var item = []; 

下,改變這種:

if (~page[i].indexOf("=====")) { 

這樣:

if (~page[i].indexOf("=====")) { 
    item[k] = {}; 

我不確定這是否可行,但基本思想是創建一個空數組(var item = [];),然後在需要時添加對象(item [k] = {})。以前,您嘗試將屬性添加到未定義的對象。

0

page爲空,因爲它尚未聲明,至少在您的代碼段中。

+0

我應該包含那部分代碼。頁面是一個簡單的字符串數組... – SharpBarb

+0

您可能對'page'有一個範圍界定問題。嘗試'var page = [];'在腳本的最頂部查看它是否在全局範圍內。 – cube