Использование массива для создания таблицы HTML

1

Это мой первый вопрос, так что будьте добры.

У меня есть массив значений года/месяца, который выглядит примерно так:

[["2012", "1"], ["2013", "3"], ["2013", "4"], ["2013", "3"]]

По сути, у меня есть активная запись rails, которая, когда я прохожу через мой массив, если год и месяц уже существуют, я не хочу создавать новую строку. Я хочу поместить данные в один из моих 4 столбцов в предыдущей существующей строке.

Таким образом, таблица может выглядеть так:

<table>
   <tr>
      <th>Month/Year</th>
      <th>Sales</th>
      <th>Tech Support</th>
      <th>Management</th>
   </tr>
   <tr>
      <td>Jan/12</td>
      <td>10</td>
      <td>%nbsp;</td>
      <td>&nbsp;</td>
   </tr>
   <tr>
      <td>Mar/13</td>
      <td>&nbsp;</td>
      <td>10</td>
      <td>&nbsp;</td>
   </tr>
   <tr>
      <td>Apr/13</td>
      <td>&nbsp</td>
      <td>%nbsp;</td>
      <td>10;</td>
   </tr>
   <tr>
      <td>Mar/13</td>
      <td>10</td>
      <td>%nbsp;</td>
      <td>&nbsp;</td>
   </tr>
</table>

У меня есть инструкции, которые говорят мне, если это Sales, Tech Support или Managment, чтобы он знал, в какой столбец его включить, моя проблема.

По сути, я хочу, чтобы последняя строка Mar/13 говорила: "Эй, у вас уже есть строка Mar/13, это значение должно идти в один из столбцов (и данные таковы, что я никогда не буду повторять столбец).

Будет ли лучше работать, создав таблицу с идентификатором для TD в рельсах, которые соответствуют столбцу year/month/column, а затем назначит активную запись массиву javascript, который использует эти идентификаторы, чтобы поместить значения в использование innerHTML или есть ли более разумный способ сделать это?

  • 0
    Essentially what I want is that last row of Mar/13 to say "hey you already have a Mar/13 row, this value should go into one of it's columns (and the data is such that I will never repeat a column.) Вы имеете в виду, должны войти в одну из существующих строк?
  • 0
    Да. Таким образом, некоторые данные могут быть чем-то вроде «Управление», 13 марта, 5, а другой может быть «Продажи», «13 марта, 10». По сути, когда я получаю одно и то же «Месяц и год», я хочу поместить этот фрагмент данных в строку для этого. месяц / год, но категория всегда будет только одна из 3 («Продажи», «Техническая поддержка» или «Управление»), она никогда не будет иметь одинаковые месяц / год и категорию, но комбинация «месяц и год» потенциально может быть одинаковой, но не месяц / год / категория.
Показать ещё 1 комментарий

1 ответ

1
Лучший ответ

Я бы рекомендовал группировать данные, прежде чем пытаться вывести любое из них в представление, используя данные, которые вы указали в комментарии, мы можем сделать что-то вроде:

data = [
  { name: 'John', year: 2012, month: 3, category: 'sales', total: 3 },
  { name: 'Jacob', year: 2013, month: 3, category: 'management', total: 3 },
  { name: 'Jingleheimer', year: 2013, month: 1, category: 'tech support', total: 5 },
  { name: 'Schmidt', year: 2013, month: 3, category: 'tech support', total: 3 }
]

grouped = data.group_by { |datum| [datum[:year], datum[:month]] }

# Ruby 2.4+
transformed = grouped.transform_values do |values|
  values.each.with_object({}) do |value, result|
    result.merge!("#{value[:category]} Name" => value[:name],
                  value[:category] => value[:total])
  end
end

puts transformed.inspect
# => {[2012, 3]=>{"sales Name"=>"John", "sales"=>3},
#     [2013, 3]=>{"management Name"=>"Jacob", "management"=>3,
#                 "tech support Name"=>"Schmidt", "tech support"=>3},
#     [2013, 1]=>{"tech support Name"=>"Jingleheimer", "tech support"=>5}}

# Ruby < 2.4
transformed = grouped.map do |year_month, values|
  [year_month, values.each.with_object({}) do |value, result|
    result.merge!("#{value[:category]} Name" => value[:name],
                  value[:category] => value[:total])
  end]
end.to_h


puts transformed.inspect
# => {[2012, 3]=>{"sales Name"=>"John", "sales"=>3},
#     [2013, 3]=>{"management Name"=>"Jacob", "management"=>3,
#                 "tech support Name"=>"Schmidt", "tech support"=>3},
#     [2013, 1]=>{"tech support Name"=>"Jingleheimer", "tech support"=>5}}

Затем вы можете просто перебрать этот новый хэш с массивом [year, month] поскольку ключи и значения являются хешем category => total_for_category и выводят их, как вам хотелось бы.

  • 0
    Я тренируюсь всю эту неделю, я попробую это, как только вернусь, и дам вам голос, если я его заработаю. Благодарю.
  • 0
    Так что у меня почти все работает, но я забыл еще одну вещь, мои данные также имеют имя, прикрепленное к каждому элементу, который мне также нужен в моем преобразовании (я использую ваш 2.4). Таким образом, часть данных может выглядеть как {name : 'Jamie', год: 2013, месяц: 3, категория: 'техническая поддержка', всего: 3} Когда я пытаюсь добавить его в values.map, я получаю сообщение об ошибке "неправильная длина массива, ожидается 2, было 3 «Данные выглядят как то, с чем я могу работать, мне просто нужно имя. Без названия это выглядит примерно так [[["2012", "3"], {"Tech Support" => "3" "}], [" 2012 "," 1 "], {" Tech Support "=> "5"}]] Как я могу добавить имя?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню