2013-07-02 82 views
0

Im在將數組拆分爲3個單獨的td時掙扎不已。Javascript - 將數組拆分成單獨的數組​​

$(runner).find(".third_level .jockey_stats").html(runners[i].jockey_stats); 
$(runner).find(".third_level .trainer_stats").html(runners[i].trainer_stats); 

jockey_stats & trainer_stats是持有3個的信息,其呈現這樣兩個陣列:

<td>248-28(11.3%)-35</td> 

我想它這樣

<td>248</td> 
<td>28(11.3%)</td> 
<td>35</td> 

HTML表格內顯示

<table class="third_level" cellspacing="0" border="0"> 
<tbody> 
    <tr> 
     <th><%= I18n.t("views.wagering.third_level.career_earnings") %></th> 
     <th><%= I18n.t("views.wagering.third_level.jockey_stats") %></th> 
     <th><%= I18n.t("views.wagering.third_level.trainer_stats") %></th> 
    </tr> 
    <tr> 
     <% if @third_level_runner %> 
      <td class="earnings tl_data"><%= number_to_currency(@third_level_runner.total_earnings, :unit => "₪", :precision => 0, :delimiter => ",") %></td> 
      <td class="jockey_stats tl_data"><%= @third_level_runner.jockey_stats %></td> 
      <td class="trainer_stats tl_data"><%= @third_level_runner.trainer_stats %></td> 
     <% else %> 
      <td class="earnings tl_data">-</td> 
      <td class="jockey_stats tl_data">-</td> 
      <td class="trainer_stats tl_data">-</td> 
     <% end %> 
    </tr> 
</tbody> 

+0

您是否嘗試過?在短劃線('-')上分裂似乎就是你在做什麼 –

+0

我該怎麼做? – user1428451

+0

發佈了一個答案,這很容易,真的是 –

回答

0

OK,我會咬:

$(runner).find(".third_level .jockey_stats").html(runners[i].jockey_stats.replace(/-/g, , '</td><td>')); 

這應該做的伎倆。
如果你不想使用正則表達式:

$(runner).find(".third_level .jockey_stats").html(runners[i].jockey_stats.split('-').join('</td><td>')); 

正則表達式的方法是這樣的:表達破折號(-)相匹配,並與</td><td>替換它,使用全局標誌(g ),表達式應用於字符串中的所有破折號。
有效<td>248-28(11.3%)-35</td>變得<td>248</td><td>28(11.3%)-35</td>,然後<td>248</td><td>28(11.3%)</td><td>35</td>

join-split方法導致更高的比特開銷在這種情況下,第一串被分解成一個字符串數組:

'<td>248-28(11.3%)-35</td>'.split('-'); 

變爲:

['<td>248','28(11.3%)','35</td>'] 

應用join,以</td><td>作爲分隔符,其產生

<td>248</td><td>28(11.3%)</td><td>35</td> 

但是,如果標記可能包含短劃線,則應該使用正則表達式並對錶達式進行一些處理。一個懶惰的解決方案可能是:

jockey_stats.replace(/\>[^<]*/g, function(inner) 
{//inner matches substring starting from first > to first < 
    return inner.replace(/-/g, '</td><td>'); 
}); 

這樣,包含短劃線的標記內的屬性將不會被處理。
表達相當簡單:
\>[^<]*匹配>和隨後的所有字符,如果有的話,那<,換句話說,一切插圖中><
然後將該匹配傳遞給一個函數,該函數用</td><td>替換所有破折號。

例如:

console.log('<td data-type="foo">248-28(11.3%)-35</td>'.replace(/\>[^<]*/g, function(inner) 
{ 
    return inner.replace(/-/g, '</td><td>'); 
})); 

日誌"<td data-type="foo">248</td><td>28(11.3%)</td><td>35</td>"