Использование собственного макроса JavaScript для форматирования данных транзакции электронной коммерции в формате слоев данных GTM - PullRequest
0 голосов
/ 31 января 2019

Я работаю над реализацией Google Tag Manager для сайта электронной коммерции.

К сожалению, мы не можем жестко закодировать DataLayers.Поэтому я смотрю на обходные пути.Я думал, что смогу реализовать слои данных самостоятельно, используя менеджер тегов Google и пользовательский макрос javascript.Сейчас я работаю над событием покупки.Я успешно удалил страницу подтверждения покупки и получил три переменные: productName, productId и productPrice.Что все, что мне нужно на данный момент.Эти три переменные выступают в качестве массивов в случае, когда несколько продуктов приобретаются в одной транзакции.Таким образом, переменные выглядят так, как показано ниже.

Теперь моя цель - отформатировать эти данные в формате слоев данных, чтобы их можно было использовать в GTM и GA.

См. Мой код ниже

Спасибо за вашу помощь!

Джек

//this is what I currently have

var productName = [ 'Product A', 'Product B', 'Product C']
var productId = ['1111', '2222', '3333']
var productPrice = [2.99, 4.95, 6.95]



//this is the format I want to achieve

var products = [{
        'name': 'Product A',
        'id': '1111',
        'price': '2.99'                        
       },
       {
        'name': 'Product B',
        'id': '2222',
        'price': '4.95'
        },
        {
        'name': 'Product C',
        'id': '3333',
        'price': '6.95'
       }]

1 Ответ

0 голосов
/ 01 февраля 2019

Это будет работать, но я не уверен насчет поддержки во всех браузерах

var column = ['name', 'id', 'price']
var productName = ['Product A', 'Product B', 'Product C']
var productId = ['1111', '2222', '3333']
var productPrice = [2.99, 4.95, 6.95]
var agg = [productName, productId, productPrice];
var row = Object.keys(agg[0])
        .map(colNumber => agg.map(rowNumber => rowNumber[colNumber]))
var arr = row.map(function(row) {
  return row.reduce(function(result, field, index) {
    result[column[index]] = field;
    return result;
  }, {});
});

var products = arr.reduce(function(acc, cur, i) {
  acc[i] = cur;
  return acc;
}, {});

console.log(products)
...