2015-05-01 21 views
0

我有一個函數執行通過ajax請求返回的數據集的迭代,該請求依次遍歷數據鍵數組,以便它僅從JSON中返回它們的鍵。僅在對象的最後一次迭代中發生的動作

對於dataKey的每次迭代,我還遍歷一個dataLink對象,該對象測試dataLink對象的當前迭代的索引是否等於dataKey的值,然後添加到數據數組(如果有數據鏈接和沒有,如果沒有)。

唯一的問題是它只對dataKeys的最後一次迭代執行。

的代碼如下:

... jQuery ajax request ... 

success: function(dataset) { 
      var dataR = [] 
      for(var k in dataset){ 
       d = dataset[k]; 
       data = []; 
       for(var i in dataKeys) { 
        if (dataLink.length != 0) { 
         for (var j in dataLink) { 
          if (j == dataKeys[i]) { 
           if(dataLink[j][1] != null) { 
            data[i] = [d[dataKeys[i]], dataLink[j][0], d[dataLink[j][1]]]; 
           }else{ 
            data[i] = [d[dataKeys[i]], dataLink[j][0]]; 
           } 
          } else { 
           data[i] = d[dataKeys[i]]; 
          } 
         } 
        }else{ 
         data[i] = d[dataKeys[i]]; 
        } 
       } 
       dataR[k] = $(getTableRow(data)); 
      } 
      dataRows = dataR; 
     } 
    } 
); 

... 

所以,如果我將它傳遞 'dataKeys' 的陣列:

var dataKeys = 
      [ 
       'name', 
       'prize_pool', 
       'max_users', 
       'published', 
       'start_date', 
       'registration_open_date', 
       'registration_close_date', 
      ]; 

和數據鏈的一個目的:

var dataLink = { 
     'name': ['http://example.dev', 'id'], 
     'prize_pool': ['http://dev.dev'], 
     'published': ['http://this.dev'], 
    }; 

它僅將鏈接添加到dataLink對象的最後一次迭代中。

這裏也是我的代碼生成HTML jQuery對象中去的:

dataR[k] = $(getTableRow(data)); 

getTableRow()...

function getTableRow(data){ 
     row = "<tr>"; 

     for (i in data) { 
      if(Array.isArray(data[i])){ 
       if(data[i][2] != null) { 
        row += "<td><a href='" + data[i][1] + "/" + data[i][2] + "'>" + data[i][0] + "</a></td>"; 
       }else{ 
        row += "<td><a href='" + data[i][1] + "'>" + data[i][0] + "</a></td>"; 
       } 
      }else{ 
       row += "<td>" + data[i] + "</td>"; 
      } 
     } 

     row += "</tr>"; 

     return row; 
    } 

使用上面我結果的代碼是這樣(其中橙色鏈接): enter image description here

但我期待'名稱','獎池'和'發佈'行被鏈接。

編輯:

對於參考JSON:

[ 
{ 
    "id":1, 
    "name":"one", 
    "games_id":1, 
    "platforms_id":"1", 
    "max_users":100, 
    "registered_users":0, 
    "prize_pool":1000, 
    "entry_fee":10, 
    "published":0, 
    "registration_open_date":"0000-00-00 00:00:00", 
    "registration_close_date":"0000-00-00 00:00:00", 
    "start_date":"0000-00-00 00:00:00", 
    "created_at":"2015-04-28 20:35:23", 
    "updated_at":"2015-04-28 20:35:23" 
}, 
{ 
    "id":2, 
    "name":"Two", 
    "games_id":1, 
    "platforms_id":"3", 
    "max_users":1000, 
    "registered_users":0, 
    "prize_pool":10000, 
    "entry_fee":100, 
    "published":0, 
    "registration_open_date":"0000-00-00 00:00:00", 
    "registration_close_date":"0000-00-00 00:00:00", 
    "start_date":"0000-00-00 00:00:00", 
    "created_at":"2015-04-28 20:37:16", 
    "updated_at":"2015-04-28 20:37:16" 
}, 
{ 
    "id":3, 
    "name":"The Final Countdown", 
    "games_id":2, 
    "platforms_id":"2", 
    "max_users":5, 
    "registered_users":0, 
    "prize_pool":99999, 
    "entry_fee":50, 
    "published":0, 
    "registration_open_date":"0000-00-00 00:00:00", 
    "registration_close_date":"0000-00-00 00:00:00", 
    "start_date":"0000-00-00 00:00:00", 
    "created_at":"2015-04-30 17:54:15", 
    "updated_at":"2015-04-30 17:54:15" 
}, 
{ 
    "id":4, 
    "name":"GoogleTourn", 
    "games_id":2, 
    "platforms_id":"2", 
    "max_users":40, 
    "registered_users":0, 
    "prize_pool":4, 
    "entry_fee":0.05, 
    "published":0, 
    "registration_open_date":"0000-00-00 00:00:00", 
    "registration_close_date":"0000-00-00 00:00:00", 
    "start_date":"0000-00-00 00:00:00", 
    "created_at":"2015-04-30 00:00:00", 
    "updated_at":"2015-04-30 00:00:00" 
} 
] 

回答

-1

意想不到的結果發生,因爲我一直在引用了錯誤的方式在數據鏈路性能。

的解決方案是使用JavaScript的目標函數...特別是:

hasOwnProperty() 

Object.getOwnPropertyDescriptor() 

解決方案與正確的參考:

for(var i in dataKeys) { 
     if (dataLink.length != 0) { 
      for (var j in dataLink) { 
       if (dataLink.hasOwnProperty(dataKeys[i])) { 
        dataLinkDesc = Object.getOwnPropertyDescriptor(dataLink, dataKeys[i]); 
        if(dataLinkDesc.value.length === 1){ 
         data[i] = [d[dataKeys[i]], dataLinkDesc.value[0]]; 
        }else if(dataLinkDesc.value.length === 2){ 
           data[i] = [d[dataKeys[i]], dataLinkDesc.value[0], d[dataLinkDesc.value[1]]]; 
        } 
       } else { 
        data[i] = d[dataKeys[i]]; 
       } 
      } 
     }else{ 
      data[i] = d[dataKeys[i]]; 
     } 
    } 

,可知該溶液: here

相關問題