2015-11-05 144 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的定義)。「 –