如何在 GTM 中使用 javascript 替换数据层中的参数名称
How can I replace parameter names in the dataLayer using javascript in GTM
我有一个数组,其中包含我从 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;
}
当我将上面看到的这个版本与变量一起使用时,“名称”键被删除,并且我没有在返回的数据中得到更改的“content_name”键。毫无疑问,一些简单的事情让我无法理解。
这里有一个类似的问题 Google Tag Manager > dataLayer variable find and replace with javascript variable 但无法获得对我有用的建议答案或从中提取有效的解决方案。
如有任何帮助,我们将不胜感激。
写一个新数组
str.replace
是字符串而不是数组的 replace
函数。此处您正在处理数组中的对象。
您不能只是猜测一个可以工作的函数,然后在这里提出问题。请查看文档并找到 JavaScript 教程如何使用字符串、对象和数组。
文档中已经包含了您可以学习的示例。
以下是 JavaScript 文档的一些链接:
一个易于理解的解决方案是创建一个新数组。
遍历数组中的每个对象和对象中的每个 属性 并从中创建一个新对象。没有必要花哨。如果需要,只需使用一两个循环即可。
请参阅下面的工作片段。
示例代码
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);
}
正如我所讨论的那样,我 post 这是对您更新后的问题的新答案。
我也试过 delete
,但正如您所体验的那样,它也会删除分配的值。
但您也可以创建一个新数组,其中 returns 更改的产品:
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
是最近的。
关于未来,请阅读 how much research is expected of you 此处的 SO。期望是您不会尝试一次,失败后立即去问。您知道您必须学习 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;
})();
我有一个数组,其中包含我从 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;
}
当我将上面看到的这个版本与变量一起使用时,“名称”键被删除,并且我没有在返回的数据中得到更改的“content_name”键。毫无疑问,一些简单的事情让我无法理解。
这里有一个类似的问题 Google Tag Manager > dataLayer variable find and replace with javascript variable 但无法获得对我有用的建议答案或从中提取有效的解决方案。
如有任何帮助,我们将不胜感激。
写一个新数组
str.replace
是字符串而不是数组的 replace
函数。此处您正在处理数组中的对象。
您不能只是猜测一个可以工作的函数,然后在这里提出问题。请查看文档并找到 JavaScript 教程如何使用字符串、对象和数组。
文档中已经包含了您可以学习的示例。
以下是 JavaScript 文档的一些链接:
一个易于理解的解决方案是创建一个新数组。
遍历数组中的每个对象和对象中的每个 属性 并从中创建一个新对象。没有必要花哨。如果需要,只需使用一两个循环即可。
请参阅下面的工作片段。
示例代码
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);
}
正如我所讨论的那样,我 post 这是对您更新后的问题的新答案。
我也试过 delete
,但正如您所体验的那样,它也会删除分配的值。
但您也可以创建一个新数组,其中 returns 更改的产品:
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
是最近的。
关于未来,请阅读 how much research is expected of you 此处的 SO。期望是您不会尝试一次,失败后立即去问。您知道您必须学习 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;
})();