0

当您在您的网站上使用 Google Analytics DataLayer 时,您将其作为全局变量 dataLayer。您可以将自己的事件变量添加到其中。

如何将其中的所有变量转换为类似的对象

{var:value}
4

2 回答 2

0

我不太明白你对 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']
于 2015-11-23T19:30:15.030 回答
0

您可以像访问任何其他对象一样访问它:

var dataLayer = [{
   myVar1: 'val1',
   myVar2: 'val2
}]

var myVar1 = dataLayer[0].myVar1;
var myVar2 = dataLayer[0].myVar2;
于 2015-11-22T06:42:26.027 回答