我有一个数组包含电子商务订单信息,我从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”的实例都需要替换为像素将识别的正确实例。
这是一个加解释性的屏幕视频,以防有帮助。
我试过这样做:
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,但无法得到建议的答案来为我工作或从中提取一个有效的解决方案。
任何帮助将在这将是超级感谢。
发布于 2021-12-23 08:59:53
如上文所述,我对您最新的问题发布了这个新的答案。
我也尝试过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是最近才使用的。
关于未来,请在这里阅读对你的期望有多高。我们的期望是,你不尝试一次,失败,并立即去问。您知道您必须学习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;
})();
发布于 2021-12-22 15:28:57
编写一个新数组
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);
}
https://stackoverflow.com/questions/70443521
复制相似问题