当您在您的网站上使用 Google Analytics DataLayer 时,您将其作为全局变量 dataLayer。您可以将自己的事件变量添加到其中。
如何将其中的所有变量转换为类似的对象
{var:value}
当您在您的网站上使用 Google Analytics DataLayer 时,您将其作为全局变量 dataLayer。您可以将自己的事件变量添加到其中。
如何将其中的所有变量转换为类似的对象
{var:value}
我不太明白你对 nyuens 回答的激烈反应。首先,由于这是 javascript,所以数组也是一个对象,其次,dataLayer 是一个对象数组,或者,正如我们在 JavaScript 中所说的,一个对象(毕竟它被称为 JavaScript Object Notation)。所以你有一个带有数字索引的数组,其中每个元素都是一个对象(它可能又包含其他数组和对象)。
不过,我强烈反对 nyuen 建议使用数字索引对 dataLayer 中的元素进行寻址。如果您在标签管理器代码 dataLayer[0] 包含您的自定义数据之前将数据推送到您的 dataLayer,否则它将包含 gtm.load 事件和相关数据。所以这是不可靠的。
但是,您似乎真正想要的是展平对象,即使用数字键删除嵌套结构并具有一维结构。幸运的是,有人编写了一个这样做的函数:
var flattenObject = function(ob) {
var toReturn = {};
for (var i in ob) {
if (!ob.hasOwnProperty(i)) continue;
if ((typeof ob[i]) == 'object') {
var flatObject = flattenObject(ob[i]);
for (var x in flatObject) {
if (!flatObject.hasOwnProperty(x)) continue;
toReturn[i + '.' + x] = flatObject[x];
}
} else {
toReturn[i] = ob[i];
}
}
return toReturn;
};
这会从嵌套对象生成“一维”对象。通常这意味着具有相同名称的键将被相应的最后一个元素覆盖。IE
dataLayer = [
{'key':value1},
{'key':value2},
]
会导致一个简单的
{'key':value2}
因为第二个“键”覆盖了第一个。然而,上面的函数通过将索引存储为键名的一部分来缓解这种情况,所以你会得到
{'0.key':value1, '1.key':value2}
不幸的是,这意味着您不能使用点语法,而必须用尖括号对元素进行寻址:
yourvariablename['0.key']
您可以像访问任何其他对象一样访问它:
var dataLayer = [{
myVar1: 'val1',
myVar2: 'val2
}]
var myVar1 = dataLayer[0].myVar1;
var myVar2 = dataLayer[0].myVar2;