如何将GTM中JS变量获取的item_name数组转为逗号分隔文本?
解决GTM中提取dataLayer商品名称并转为逗号分隔文本的问题
问题背景
需要在purchase事件的dataLayer中仅捕获item_name字段,用于其他营销标签。直接调用ecommerce.items会返回完整商品对象,dataLayer变量无法满足需求,自行编写的GTM JavaScript变量返回数组格式,希望转为逗号分隔的文本,尝试for循环后未解决。
原代码与dataLayer示例
原GTM JavaScript变量代码
var itemslist = []; var products = {{dl - ecommerce - item name}}; for(i=0; i < products.length; i++){ itemlist.push( 'item_name': products[i].item_name ) } return itemlist;
完整dataLayer示例
{ "event": "purchase", "ecommerce": { "transaction_id": 0000, "affiliation": "xxxx", "value": 222, "currency": "USD", "coupon": "No coupon", "items": [ { "item_id": "4291", "item_name": "xyz", "affiliation": "xxx", "coupon": "No coupon", "item_category": "us", "currency": "USD", "discount": "0.00", "index": 0, "price": 111, "quantity": 1 }, { "item_id": "xxx", "item_name": "abc", "affiliation": "xxx", "coupon": "No coupon", "item_category": "us", "currency": "USD", "discount": "0.00", "index": 1, "price": 111, "quantity": 1 } ] }
原代码问题分析
- 语法错误:
push方法中使用了对象键值对语法'item_name': products[i].item_name,不符合数组push的参数要求,会导致代码执行失败。 - 未转换格式:仅返回存储
item_name的数组,没有将数组转为逗号分隔的字符串。
修正后的代码
方案一:使用map+join(简洁写法)
var products = {{dl - ecommerce - item name}}; // 增加空值判断,避免dataLayer数据异常时报错 if (!products || !Array.isArray(products)) { return ''; } // 提取所有item_name并转为逗号分隔的字符串 return products.map(item => item.item_name).join(', ');
方案二:使用for循环(兼容旧环境写法)
var itemslist = []; var products = {{dl - ecommerce - item name}}; // 先判断数据有效性 if (products && Array.isArray(products)) { for(var i = 0; i < products.length; i++){ // 直接push item_name字符串,而非对象 itemslist.push(products[i].item_name); } } // 将数组转为逗号分隔的文本 return itemslist.join(', ');
说明
- 增加了空值判断逻辑,防止dataLayer中缺失
ecommerce.items或格式错误时出现控制台报错。 - 两种方案最终都会将提取到的
item_name转为类似xyz, abc的逗号分隔文本,满足营销标签的格式需求。
内容的提问来源于stack exchange,提问作者SGDM
相关产品推荐
相关产品推荐

