如何在 GTM 中使用 javascript 替换 dataLayer 中的参数名称
Posted
技术标签:
【中文标题】如何在 GTM 中使用 javascript 替换 dataLayer 中的参数名称【英文标题】:How can I replace parameter names in the dataLayer using javascript in GTM 【发布时间】:2022-01-23 08:26:05 【问题描述】:我有一个数组,其中包含我从 dataLayer 提取到 GTM 的电子商务订单信息。我已将此订单信息定义为一个变量,我想将其传递给支付完成事件的 TikTok 像素。
我面临的问题是 TikTok 像素期望键名“id”被称为“content_id”,键名“name”被称为“content_name”。我知道可以在 GTM 中使用自定义 javascript 变量执行搜索和替换,然后将编辑后的数组发送到像素。但我无法弄清楚如何使用 JavaScript 进行搜索和替换部分。这是我正在使用的,这是我的变量中的内容:
[
id: "JBLANC015",
name: "Blanc Diffuser, Maldivian Breeze",
category: "Diffusers",
price: "29.90",
quantity: "3"
,
id: "CH-AH-SHK-GREEN",
name: "Hand Gesture Candle, Shaka Green",
category: "Candles",
price: "39.90",
quantity: "1"
]
这只是一个例子,数组可能包含更多或更少的产品,“id”和“name”的所有实例都需要替换为像素可以识别的正确实例。
这里是extra-explanatory screencast video,以防万一。
我试过这个:
function()
var str = my array variable;
return str.replace("id", "content_id");
但没有成功。
编辑。在理解了处理字符串和数组之间的区别之后,我得到了这样的东西,它可以一次更改一个键:
function()
var products =
[
name: "Hand Gesture Candle, Shaka Green",
id: "21834",
price: "39.900000",
brand: "Candlehand",
category: "Candles"
]
;
products.forEach(function(obj)
obj.content_name = obj.name;
delete obj.name;
);
return products;
这可以完成这项工作,但当我插入一个直接拉动数组并从网站直播的变量时就不行了。
function()
var products = my array variable;
products.forEach(function(obj)
obj.content_name = obj.name;
delete obj.name;
);
return products;
当我将上面看到的这个版本与变量一起使用时,“name”键被删除,并且我没有在返回的数据中获得更改后的“content_name”键。毫无疑问,一些简单的事情让我无法理解。
Google Tag Manager > dataLayer variable find and replace with javascript variable 这里有一个类似的问题,但无法获得建议的答案来为我工作或从中提取工作解决方案。
对此的任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:如上所述,我将这个新答案发布到您更新的问题。
我也尝试了delete
,但正如您所体验的那样,它也会删除分配的值。
但你也可以创建一个新数组,返回更改后的产品:
function()
var products =
[
name: "Hand Gesture Candle, Shaka Green",
id: "21834",
price: "39.900000",
brand: "Candlehand",
category: "Candles"
];
var changes = [];
products.forEach(function(obj)
var product =
content_id: obj.id,
content_name: obj.name,
price: obj.price,
brand: obj.brand,
category: obj.category
;
changes.push(product);
);
return changes;
我在另一个答案中的错误是使用let
。我们应该改用var
,因为let
是最近才出现的。
对于未来,请在 SO 阅读how much research is expected of you。期望是您不要尝试一次,失败并立即去询问。您知道您必须学习 JavaScript,因此请查看教程和文档。 初学者的问题很好,但你必须证明你已经完成了自己的工作才能达到这一点。
请参阅下面的上述代码的快速演示(添加了console.log()
调用)。
(function()
var products =
[
name: "Hand Gesture Candle, Shaka Green",
id: "21834",
price: "39.900000",
brand: "Candlehand",
category: "Candles"
]
;
var changes = [];
products.forEach(function(obj)
var product =
content_id: obj.id,
content_name: obj.name,
price: obj.price,
brand: obj.brand,
category: obj.category
;
console.log(product);
changes.push(product);
);
return changes;
)();
【讨论】:
这太棒了彼得,而且效果很好。我已经接受了答案,但缺乏支持的声誉。看到您的代码,我可以理解嵌套变量、对象和推送发生了什么,以便能够为未来的用例重新创建类似的东西。对于我的水平来说,我太雄心勃勃了,以至于我认为我已经接近于把这样的东西放在一起了。我确实花了 20 多个小时进行研究和测试,并且了解缺少什么但缺乏执行的基础知识。也不想用我尝试过的东西创建一堵文字墙,我知道我发布的第一个示例是非常错误的。丹克! 没问题,不客气!【参考方案2】:写一个新数组
str.replace
是字符串的replace
函数,而不是数组。在这里,您正在处理数组中的对象。
你不能只是猜测一个可以工作的功能,然后在这里问一个问题。请查看文档并查找 JavaScript 教程如何使用字符串、对象和数组。
该文档已经包含您可以从中学习的示例。
以下是 JavaScript 文档的一些链接:
MDN: JavaScript String MDN: JavaScript Array MDN: JavaScript Object一个易于理解的解决方案是创建一个新数组。 循环遍历数组中的每个对象和对象中的每个属性,然后从中创建一个新对象。没有必要花哨。如果需要,只需使用一两个循环即可。 请参阅下面的工作 sn-p。
示例代码
let arr = [
id: "JBLANC015",
name: "Blanc Diffuser, Maldivian Breeze",
category: "Diffusers",
price: "29.90",
quantity: "3"
,
id: "CH-AH-SHK-GREEN",
name: "Hand Gesture Candle, Shaka Green",
category: "Candles",
price: "39.90",
quantity: "1"
];
let trackingArray = [];
for(var i=0; i<arr.length; i++)
let obj = ;
for(var k in arr[i])
switch(k)
case "id":
obj.content_id = arr[i][k];
break;
case "name":
obj.content_name = arr[i][k];
break;
default:
obj[k] = arr[i][k];
break;
console.log(obj);
trackingArray.push(obj);
【讨论】:
谢谢彼得,不幸的是,在使用此代码时,我在 GTM 中收到错误“第 2 行字符 1 错误:此语言功能仅支持 ECMASCRIPT_2015 模式或更高模式”。关于 GTM 中使用的引擎的一些东西,我认为这也是为什么在 stackoverlfow 上发现的大量类似问题的建议对我不起作用的原因。我用一个接近我所寻求的例子来更新我的问题,这反映了我对同时学习的字符串和数组之间的区别的更好理解。我不是开发人员,而是营销人员,请放轻松。 哦,这是一个面向开发人员的网站,我们当然假设这里有同行。感谢您发布您的代码。我会尝试一个新的答案。以上是关于如何在 GTM 中使用 javascript 替换 dataLayer 中的参数名称的主要内容,如果未能解决你的问题,请参考以下文章
javascript 使用GTM的客户端Javascript错误跟踪(谷歌分析)
javascript 使用jQuery的GTM分析框架(事件委托,自定义事件)