如何将google DataLayer转换为具有变量键值的javascript对象
How can google DataLayer be converted into javascript object with key values for variables?
当您在网站上使用Google Analytics DataLayer时,您将其作为全局变量DataLayer。您可以将自己的事件变量添加到其中。
如何将其中的所有变量转换为这样的对象
{var:value}
您可以像访问任何其他对象一样访问它:
var dataLayer = [{
myVar1: 'val1',
myVar2: 'val2
}]
var myVar1 = dataLayer[0].myVar1;
var myVar2 = dataLayer[0].myVar2;
我不太理解你对nyuens答案的激烈反应。首先,因为这是javascript,所以数组也是一个对象,其次,dataLayer是一个对象数组,或者,正如我们在javascript中所称,是一个物体(毕竟,它被称为javascript物体符号)。因此,您有一个带有数字索引的数组,其中每个元素都是一个对象(反过来可能包含其他数组和对象)。
不过,我强烈反对nyuen关于用数字索引寻址数据层中元素的建议。如果在标记管理器代码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;
};
这将从嵌套对象生成一个"一维"对象。通常,这意味着具有相同名称的键将被相应的最后一个元素覆盖。即
dataLayer = [
{'key':value1},
{'key':value2},
]
会产生一个简单的
{'key':value2}
因为第二个"键"覆盖了第一个。然而,上面的函数通过将索引存储为密钥名称的一部分来缓解这种情况,因此您将获得
{'0.key':value1, '1.key':value2}
不幸的是,这意味着你不能使用点语法,必须用尖括号来称呼元素:
yourvariablename['0.key']
相关文章:
- 我可以更改剑道UI网格吗's的外键值
- meteor.js模板助手作为变量与键+值
- 将javascript变量列表转换为对象键/值对
- 作为变量的 Javascript 数组键值
- 在 JavaScript 中,在声明对象的新键:值对时,引用对象的变量名与使用“this”之间是否存在差异
- 键/值对的JavaScript数组使用文本变量名作为键
- 如何将google DataLayer转换为具有变量键值的javascript对象
- 根据键从JS数组中分配变量的值
- 将对象键设置为变量的值-为什么有两种不同的方法
- 键值对中的随机变量不被解释为变量
- 如何从json数据中获取特定的键值对并存储在节点js中的变量中
- 如何在JavaScript中通过键给变量赋值
- 使用for循环将键值对分隔为两个变量
- 根据变量键的值查找变量键
- 如何将一个变量中的键值赋给另一个变量中的值
- 如何在Google Chrome本地存储同步中设置变量键和值
- MongoDB:添加元素到内部json对象,而两个键值存储在变量中
- 从给定的变量创建一个集合.如何获取对象'键'值以对应给定变量的名称
- angular:使用变量键访问JSON值
- 为对象创建键:值对,同时循环并为每个对象设置变量