Javascript - 将数组拆分为单独的

时间:2013-07-02 10:54:44

标签: javascript arrays split

我正在努力将数组分成3个单独的td。

$(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>

1 个答案:

答案 0 :(得分:0)

好的,我会咬人:

$(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>"

记录{{1}}