JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <div id="grid"></div>
    <hr>
    <button id="btn_add_row">Добавить строку</button>
    <hr>
    <button type="submit">Отправить на сервер</button>

CSS

input {
    width: 10%;
}

.row:not(:last-child) {
    margin-bottom: 10px;
}

JavaScript

// Шаблон
var rowTemplate = '' +
  '<div class="row">' +
    '<input id="namespace_data" name="table_data[%n][data]"/>' +
    '<input id="namespace_date" name="table_data[%n][date]"/>' +
    '<input id="namespace_repeat" name="table_data[%n][count_repeat]"/>' +
    '<input id="namespace_thd" name="table_data[%n][through_count_day]"/>' +
    '<button class="btn_copy_row">Скопировать строку</button>' +
    '<button class="btn_remove_row">Удалить строку</button>' +
  '</div>';

// Начальный ID для row
var rowId = 0;

// Добавление строки
$('#btn_add_row').on('click', function() {
    var prepareTpl = rowTemplate.split('%n').join(rowId++);
    
    $('#grid').append(prepareTpl);
});

// Копирование (делегирование!)
$('#grid').on('click', '.btn_copy_row', function() {
    var inputValues = [];
    var prepareTpl = rowTemplate.split('%n').join(rowId++);
    var $row = $(prepareTpl);
    
    // Проходимся по всем input копируемого row
    $(this).parent().find('input').each(function(i, el) {
        // Получаем значение
        var value = $(el).val();
      
        // Если значение есть, то вставляем в копию в такой же input
        if(value) {
            var searchId = $(el).attr('id');
            
            $row.find('#' + searchId).val(value);
        }
    });
   
    $('#grid').append($row);
});

// Удаление (делегирование!)
$('#grid').on('click', '.btn_remove_row', function() {
    $(this).parent().remove();
});