2016-07-31 34 views
3

我有一個JSON文件。我必須在這個文件中讀取JSON文件WinType是該字段中的兩個值提名和贏的字段。我必須將此值安排在表格中,如1 = Win和0 =提名。但有一段時間,如果記錄沒有發現在json文件中,我想<td> </td>空白。所以,我的表顯示如下如何使用JSON顯示錶中的空白記錄?

<html> 
<body> 
    <TABLE BORDER=2 BORDERCOLOR=RED> 
     <TR> 
      <TD>12 Years a Slave</TD> 
      <TD>1</TD> 
      <TD></TD> 
      <TD>0</TD> 
     </TR> 

     <TR> 
      <TD>American Hustle</TD> 
      <TD>0</TD> 
      <TD>0</TD> 
      <TD>1</TD> 
     </TR> 

     <TR> 
      <TD>Captain Phillips</TD> 
      <TD></TD> 
      <TD>0</TD> 
      <TD>1</TD> 
     </TR> 
    </TABLE> 
</body> 
</html> 

我的JSON文件是:

[{ 
    "ID": 1, 
    "Nominee": "12 Years a Slave", 
    "WinProbability": 0.00, 
    "WinType": "Win" 
}, { 
    "ID": 3, 
    "Nominee": "12 Years a Slave", 
    "WinProbability": 0.66, 
    "WinType": "Nominated" 
}, { 
    "ID": 1, 
    "Nominee": "American Hustle", 
    "WinProbability": 1.62, 
    "WinType": "Nominated" 
}, { 
    "ID": 2, 
    "Nominee": "American Hustle", 
    "WinProbability": 0.85, 
    "WinType": "Win" 
}, { 
    "ID": 3, 
    "Nominee": "American Hustle", 
    "WinProbability": 0.07, 
    "WinType": "Win" 
}, { 
    "ID": 2, 
    "Nominee": "Captain Phillips", 
    "WinProbability": 0.00, 
    "WinType": "Win" 
}, { 
    "ID": 3, 
    "Nominee": "Captain Phillips", 
    "WinProbability": 1.52, 
    "WinType": "Win" 
}] 

我試過,但不能正常工作。

嘗試代碼:

$.ajax({ 
    url: 'movie.json', 
    dataType: 'json', 

    success: function(data) { 
     var groupByNominee = data.reduce(function(rv, x) { 
      (rv[x['Nominee']] = rv[x['Nominee']] || []).push(x); 
      return rv; 
     }, {}); 

     $(Object.keys(groupByNominee).map((nom) => 
      `<TR> 
       <TD>${nom}</TD> 
       ${groupByNominee[nom].map((item)=> 
         `<TD> 
          ${(item.WinType==='Win')?1:0} 
         </TD>` 
        ).join('') 
       } 

      </TR>` 
      ).join('')).appendTo('#Table'); 
    } 
}); 
+0

你能解釋一下你找不到記錄嗎?你在談論一個缺失的屬性?您發佈的示例JSON似乎沒有遺漏任何會導致您正在尋找空白條件的內容。 –

+0

@勞倫斯約翰遜如果在表td中缺少屬性空白 –

+0

@勞倫斯約翰遜在我的嘗試代碼比較代名詞但不匹配ID –

回答

1

假設你剛剛只是可能丟失WinType屬性,試試這個:

$.ajax({ 
    url: 'movie.json', 
    dataType: 'json', 

    success: function(data) { 
     var groupByNominee = data.reduce(function(rv, x) { 
      (rv[x['Nominee']] = rv[x['Nominee']] || []).push(x); 
      return rv; 
     }, {}); 

     $(Object.keys(groupByNominee).map((nom) => 
      `<TR> 
       <TD>${nom}</TD> 
       ${groupByNominee[nom].map((item)=> 
         `<TD> 
          ${(typeof(item.WinType) !== 'undefined' && item.WinType.length > 0) ? (item.WinType === 'Win' ? '1' : '0') : ''} 
         </TD>` 
        ).join('') 
       } 

      </TR>` 
      ).join('')).appendTo('#Table'); 
    } 
}); 

這應該檢查WinType屬性存在,它的長度(如果找到)是在檢查它是否等於Win之前大於0。

+0

但td不顯示空白https://jsfiddle.net/abdennour/4vg2broh/ –

+0

如果「代名人」:「12年從」爲ID = 2沒有在JSON文件中找到,那麼我的TR這個樣子的​​1​​​​0 –

+0

我不明白這一點。它在你的JSON中顯示了12年的兩個從屬條目,它們都具有WinType值 –

0

我想這是你想要什麼:

 
Nominee   "ID":1 "ID":2 "ID":3 
12 Years a Slave 1     0 
American Hustle  0   1  1 
Captain Phillips    1  1 

那麼你需要一個參照組,如[1,2,3] 這段代碼只是爲了顯示缺少的一部分,而不是優雅,但工程:

function (data){ 
    var groupByNominee=data.reduce(function(rv, x) { 
    (rv[x['Nominee']] = rv[x['Nominee']] || []).push(x); 
    return rv; 
    }, {}); 
    var ids = [1,2,3]; 


    $(Object.keys(groupByNominee).map((nom)=>{ 
    var str = '<TR>'; 
    str += '<TD>'+ nom + '</TD>' 

    var ids=[1,2,3]; //Need all IDs 
    var mid = ids.map((id)=>{ // then loop all ids to get the empty id displayed. 
     var type = ""; 
     groupByNominee[nom].forEach((item)=>{ 
     if (item.ID == id){ 
      type = (item.WinType==='Win')?'1':'0' ; 
     } 
     }); 
     return '<td>'+type+'</td>'; 
    }).join(''); 
    str += mid; 
    str += '</TR>'; 
    return str; 
    } 
    ).join('')).appendTo('#Table'); 

}