JS Object中包含的数组是嵌套的两个深度

时间:2013-12-22 15:37:21

标签: javascript arrays json

我正在构建一个对象数组。结构应该是这样的:

var array = [
 { 'keyword' : 'somekeyword',
   'guidelines' : [ "guideline1", "guideline2", "guideline3"] 
 },
 { 'keyword' : 'anotherkeyword',
   'guidelines' : [ "guideline1", "guideline2", "guideline3"] 
 }
]

相反,它是这样的:

var array = [
 { 'keyword' : 'somekeyword',
   'guidelines' : [[ "guideline1", "guideline2", "guideline3"]] 
 },
 { 'keyword' : 'anotherkeyword',
   'guidelines' : [[ "guideline1", "guideline2", "guideline3"]] 
 }
]

在构建我的对象以在指南数组上获得第二级嵌套时,我做错了什么?这是构建数组的函数,从HTML文件中的数据表读入:

    $(html).find('tr').each(function() {
                keywordObj = {};
                guidelinesCell;
                $(this).find('td').each(function() {
                    cellClass= $(this).attr('class');
                    if (cellClass === 's2') {
                        keywordObj.keyword = $(this).text();
                    } else if (cellClass === 's3' || cellClass == 's4') {
                        guidelinesCell = [];
                        guidelinesCell.push( $(this).html().split('<br>') );
                        //Possibly it's this push that's causing the problem?

                        keywordObj.guidelines = guidelinesCell;

                        console.log(guidelinesCell) 
                        console.log(keywordObj.guidelines)

                        //At this point, the array is already nested- the console logs return eg                                                                   
                             [Array[2]]
                              0: Array[2]
                                 0: "GuidelineName1.pdf"
                                 1: "GuidelineName2.pdf"
                    }
                });
                i ++;

                if (keywordObj.guidelines && keywordObj.guidelines[0].length > 1) {

                    keywordsToLeitlinien.push(keywordObj);
                }

            });

作为参考,这里是它正在阅读的标记样本:

 <tr dir="ltr">
     <td class="hd">
        <p style="height:39px;">.</p>
     </td>
     <td dir="ltr" class="s2">samplekeyword</td>
     <td dir="ltr" class="s4">GuidelineName.pdf <br>GuidelineName.pdf</td>
 </tr>   

编辑添加:

这在我在此文件中的处理中不是问题,但我最终将此数组输出到JSON文件,我宁愿解决问题而不是继续解决此类输出:

{"keyword":"keywordname","guidelines":[["guidelineName1 ","guidelineName2"]]}

4 个答案:

答案 0 :(得分:2)

因为split在这里返回一个数组:

$(this).html().split('<br>')

由于你将这个数组推入另一个数组,它将嵌套。

相反,尝试类似:

guidelinesCell = $(this).html().split('<br>')

答案 1 :(得分:2)

这一行

guidelinesCell.push( $(this).html().split('<br>') );

.split将返回一个数组,因此它与将数组推入另一个数组基本相同。

所以只需将guidelinesCell分配给split的结果

guidelinesCell = $(this).html().split('<br>');

答案 2 :(得分:0)

我认为push是问题,因为jQuery函数返回一个数组。尝试只推送第一个元素:

   guidelinesCell.push( $(this).html().split('<br>')[0] );
                        //Possibly it's this push that's causing the problem?

答案 3 :(得分:0)

.split将字符串拆分为数组。 .push是将元素添加到数组的操作。所以你拥有的是[]而你正在推动["guideline values"]创建嵌套。

您应该使用的是.concat

而不是.push