Показать сообщение отдельно
  #1 (permalink)  
Старый 05.01.2019, 15:32
Профессор
Отправить личное сообщение для the_little Посмотреть профиль Найти все сообщения от the_little
 
Регистрация: 25.09.2017
Сообщений: 186

помощь с выводом данных из одного массива в другой
Здравствуйте.
И всех с Новым Годом!

Возможно я не совсем правильно сформулировал вопрос... попробую подробнее рассказать.

Сделал небольшой калькулятор.
В одном из блоков выводится информация по материалам, их стоимости и количестве.

Элементы выводятся по сути списком. Количество элементов разное и у них могут отличаться наименования используемых материалов.

В общем список эток динамический.

Выглядит он в конечном счете вот так

<ul class="materials_data_ul">
  <li class="materials_li materials_header_li">
    <span class="material_label">Наименование</span>
    <span class="material_amount">Количество</span>
    <span class="material_summ">Стоимость</span>
  </li>
  <li class="materials_li">
    <span class="material_label">Клей-пена, 600 мл</span>
    <span class="material_amount">2</span>
    <span class="material_summ">910</span>
  </li>
  <li class="materials_li">
    <span class="material_label">Герметик акрилатный, ведро/15кг</span>
    <span class="material_amount">1</span>
    <span class="material_summ">2 275</span>
  </li>
</ul>


После того как расчет сделан, мне нужно сформировать PDF файл с коммерческим предложением.

Для этого я использую pdfmaker (http://pdfmake.org)

И собственно задача вывести данные из этого списка в таблицу.
Но ничего у меня не получается.

Я написал небольшую функцию, которая перебирает все элементы списка и добавляет информацию нужного вида в массив.

var arr = [];

    $('.materials_li').each(function() {
        var printName = $(this).find('.material_label').text();
        var printAmount = Number($(this).find('.material_amount').text().replace(/\D+/g,""));
        var printSumm = Number($(this).find('.material_summ').text().replace(/\D+/g,""));
        var printPrice = printSumm/printAmount;
        var printTable = '"'+printName + '", "' + printAmount + '", "' + printSumm.toFixed(2) + '", "' + printPrice.toFixed(2) + '"';
        arr.push(printTable);
    });

    console.log(arr[2]);


console.log(arr[2]); выводит

"Герметик акрилатный, ведро/15кг", "1", "2275.00", "2275.00"

В pdfmaker данные в таблицу заносятся таким вот образом, по сути тоже массив

table: {
                    widths: ['46%', '18%', '18%', '18%'],
                    body: [
                        ["Наименование", "Кол-во", "Цена", "Сумма"],
                        [arr[2]]
                    ]
},


Содержимое arr[2] - соответсвует формату, который там должен быть.
Но [arr[2]] вызывает ошибку.

Хотя вывод определенного элемента массива тоже вариант так себе, потому что я не знаю заранее сколько элементов будет в массиве.
По хорошему прямо в таблице нужно цикл делать, но у меня ничего не получается...

В целом PDF файл задается таким вот кодом
var pdfDoc = {

        pageSize:'A4',
        pageOrientation:'portrait',//'portrait'
        pageMargins:[20,10,20,10],

        content: [
            {
                columns: [
                    {
                        fontSize: 20,
                        bold: true,
                        width: '50%',
                        text: 'HARDEK'
                    },
                    {
                        width: '50%',
                        fontSize: 12,
                        alignment: 'right',
                        margin: [0, 8, 0, 0],
                        text: '8 (3452) 93-47-22'
                    }
                ]
            },
            {
                columns: [
                    {
                        fontSize: 10,
                        width: '50%',
                        text: 'производственная компания'
                    },
                    {
                        width: '50%',
                        fontSize: 12,
                        alignment: 'right',
                        text: 'www.hardek.ru'
                    }
                ]
            },
            {
                text: '______________________________________________________________________________________________________',
                alignment: 'center' 
            },
            {
                text: 'ИСХОДНЫЕ ДАННЫЕ',
                fontSize: 12,
                bold: true,
                alignment: 'center',
                margin: [0, 100, 0, 20]
            },
            {
                table: {
                    widths: ['70%', '30%'],
                    body: [
                        ['Площадь фасада, м2', square],
                        ['Материал панелей', printMaterial],
                        ['Толщина утеплителя, мм', printUteplitel],
                        ['Модель термопанели', printModel],
                        ['Материал стен', printStena]
                    ]
                },
                layout: {
                    hLineWidth: function (i, node) {
                        return (i == 1 || i == 2 || i == 3 || i == 4 || i == 5) ? 1 : 0;
                    },
                    vLineWidth: function () {
                        return (0);
                    },
                }
            },
            {
                text: 'КОММЕРЧЕСКОЕ ПРЕДЛОЖЕНИЕ',
                fontSize: 12,
                bold: true,
                alignment: 'center',
                margin: [0, 100, 0, 20]
            },
            {
                table: {
                    widths: ['46%', '18%', '18%', '18%'],
                    body: [
                        ["Наименование", "Кол-во", "Цена", "Сумма"],
                    ]
                },
            }
        ]
    };
Ответить с цитированием