首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GTM中的javascript替换dataLayer中的参数名

如何使用GTM中的javascript替换dataLayer中的参数名
EN

Stack Overflow用户
提问于 2021-12-22 02:11:57
回答 2查看 311关注 0票数 0

我有一个数组包含电子商务订单信息,我从dataLayer拉到GTM。我已经定义了这个订单信息作为一个变量,我想传递给一个TikTok像素支付完整事件。

我面临的问题是,TikTok像素期望密钥名"id“被称为"content_id”,键名" name“被称为"content_name”。我知道可以在GTM中使用自定义Javascript变量执行搜索和替换,然后将编辑后的数组发送到像素上。但我不知道如何使用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”的实例都需要替换为像素将识别的正确实例。

这是一个加解释性的屏幕视频,以防有帮助。

我试过这样做:

代码语言:javascript
复制
function(){
   var str = {{my array variable}};
   return str.replace("id", "content_id");
}

但没有成功。

编辑。在理解了处理字符串和数组之间的区别之后,我得到了这样的结果,它可以一次更改一个键:

代码语言:javascript
复制
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;
}

这做的工作,但不是当我插入一个变量,是直接拉数组,并在网站上生活。

代码语言:javascript
复制
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,但无法得到建议的答案来为我工作或从中提取一个有效的解决方案。

任何帮助将在这将是超级感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-23 08:59:53

如上文所述,我对您最新的问题发布了这个新的答案。

我也尝试过delete,但正如您所经历的,它也将删除赋值。

但是,您也可以创建一个新数组,该数组返回更改后的产品:

代码语言:javascript
复制
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()调用)。

代码语言:javascript
复制
(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;
})();

票数 0
EN

Stack Overflow用户

发布于 2021-12-22 15:28:57

编写一个新数组

str.replace是字符串的replace函数,而不是数组。在这里,您正在处理数组中的对象。

你不能只是猜测一个可以工作的函数,然后在这里问一个问题。请查看文档并找到如何使用字符串、对象和数组的JavaScript教程。

文档中已经包含了您可以学习的示例。

下面是一些指向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);
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70443521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档