2015-11-05 123 views
0

外部JSON我目前使用此代码通过以.json文件迭代:枚举通过使用JavaScript

for (f = 0; f < forum.length; f++) { 
      end = columnArray.length - 1; 
      object = forum[f]; 
      for (property in object) 
        { 
        value = object[property]; 
        if (property === columnArray[end]) { 
         tableRowData = "<td>" + value + "</td></tr>"; 
        } else { 
         tableRowData = "<td>" + value + "</td>"; 
        } 
        tableRowData2 += tableRowData; 
        tableRowData = ""; 
       } 
      finalTableData = "<tr>" + tableRowData2; 
      finalTableData2 += finalTableData; 
      tableRowData2 = ""; 
     } 

的JSLint不喜欢在循环使用/通过数组进行迭代的想法。试图把它写成一个标准:

for (i = 0; i < forum.length; i++) {} 

但卡住了。这可能很简单,但由于某些原因,我看不出逻辑应该是什么。

谢谢。

+0

不知道你在问什么 – vinayakj

+0

我想在不使用for/in循环的情况下遍历json文件。 –

+0

如果关于'for(property in object)'然后使用'for(var i = 0; i vinayakj

回答

0

我看到JSLint可能会抱怨的两件事,所以我会回答他们俩。

对于外环,的JSLint不喜欢++家族构建(包括--变体)的,因为它们可以由空格或缺乏敏感。你的外环可以改写为:

for (i = 0; i < forum.length; i += 1) {} 

...和JSLint不应该抱怨。

对于内环,JSLint的要你把hasOwnProperty后卫到您for-in循环。可能的工作是这样的...

for (property in object) { 
    if (object.hasOwnProperty(property)) { 
     value = object[property]; 
     if (property === columnArray[end]) { 
      tableRowData = "<td>" + value + "</td></tr>"; 
     } else { 
      tableRowData = "<td>" + value + "</td>"; 
     } 
     tableRowData2 += tableRowData; 
     tableRowData = ""; 
    } 
} 

请注意,我已经包裹循环体中的,如果检查上Object.prototype.hasOwnProperty()(其中,因为数组是对象,它们可以作为方法调用使用)。这样可以防止原型链中可能会列举的属性带来的意外后果。

+0

JSLint仍然不喜欢.hasOwnProperty。仍然说:“在变量'财产'中不好”。另外,忘了++和 - 。我正在将++的更改为+ =。 –

+0

这是一个不同的问题。你在哪里定义'property'作为变量? –

+0

所有变量都在文档的顶部定义。我所看到的是JSLint不希望你使用for/in循环,因为它们可能会导致问题。添加.hasOwnProperty(显然每个ES6)可以使用for/in循环。从另一篇文章中:“你会让人们告诉你使用for-in,但这不是for-in for。for-in循环通过对象的可枚举属性,而不是数组的索引。通过ES5,订单不能保证;从ES6开始,顺序是有保证的(通过[[OwnPropertyKeys]],[[Enumerate]]以及for-in/for-of的定义)。“ –