Я работаю над реализацией Диспетчера тегов Google для веб-сайта электронной коммерции.
К сожалению, мы не можем жестко закодировать DataLayers. Поэтому ищу обходные пути. Я думал, что смогу реализовать слои данных самостоятельно, используя диспетчер тегов Google и собственный макрос javascript. Сейчас я работаю над событием покупки. Я успешно очистил страницу подтверждения покупки и получил три переменные: productName, productId и productPrice. Это все, что мне нужно на данный момент. Эти три переменные представляют собой массивы в случае, если в рамках одной транзакции приобретается несколько продуктов. Таким образом, переменные выглядят так, как показано ниже.
Теперь моя цель — отформатировать эти данные в формате datalayers, чтобы их можно было использовать в 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'
}]



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это будет работать, но я не уверен в поддержке во всех браузерах.
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.info(products)