使用Javascript中的Literal Notation将对象插入到数组中

时间:2011-11-16 22:12:19

标签: javascript

我正在解析具有已知重复结构的文档。有一个标题(1行),一个子标题(1行)和一个内容区域(未知行数)。 文档中每个项目的格式如下所示:

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

我想创建一个包含每个部分的Object的Array。 类似的东西:

 var item = [];

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

我无法有效地遍历文档并动态地将每个Object添加到Array中。我在第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++;
}

2 个答案:

答案 0 :(得分:0)

改变这个:

var item = [{}]; 

到此:

var item = []; 

接下来,改变一下:

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

到此:

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

我不确定这是否有效,但基本思路是创建一个空数组(var item = [];),然后在需要时添加对象(item [k] = {})。以前,您尝试向未定义的对象添加属性。

答案 1 :(得分:0)

page为空,因为它至少在您的代码段中尚未声明。