【问题标题】:How can google DataLayer be converted into javascript object with key values for variables?如何将 google DataLayer 转换为具有变量键值的 javascript 对象?
【发布时间】:2015-11-21 08:00:00
【问题描述】:

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

如何将其中的所有变量转换为像

这样的对象
{var:value}

【问题讨论】:

  • dataLayer 是 GTM 特定的 JSON 对象。你能更具体地说明你想做什么吗?
  • 我想访问它的值,例如 MyDataLayerVar.varName。尤其是非标准变量(用户推送)
  • 我在网站中有 .js 进行一些分析,并希望考虑将 DataLayer 中的一些变量发送到服务器

标签: javascript google-tag-manager google-datalayer


【解决方案1】:

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

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

var myVar1 = dataLayer[0].myVar1;
var myVar2 = dataLayer[0].myVar2;

【讨论】:

  • 你肯定不知道我在说什么。 dataLayer 变量是一个数组。
  • 对不起,我的语法不好,对我来说是漫长的一天。但是你需要 1) 复习你的 GTM,因为 dataLayer 是一个对象(更准确地说是一个对象数组,但通常只是称为一个对象),你只需要谷歌一下,如果你花一点力气去研究这个就像你对你的帖子所做的那样,2) 提供建设性的 cmets,而不是根据糟糕的数据对缺乏理解的人发表负面评论。
【解决方案2】:

我不太明白你对 nyuens 回答的激烈反应。首先,由于这是 javascript,所以数组也是一个对象,其次,dataLayer 是一个对象数组,或者,正如我们在 JavaScript 中所说的,一个对象(毕竟它被称为 JavaScript Object Notation)。所以你有一个带有数字索引的数组,其中每个元素都是一个对象(它可能又包含其他数组和对象)。

不过,我强烈反对 nyuen 建议使用数字索引来处理 dataLayer 中的元素。如果您在标签管理器代码 dataLayer[0] 包含您的自定义数据之前将数据推送到您的 dataLayer,否则它将包含 gtm.load 事件和相关数据。所以这是不可靠的。

但是,您似乎真正想要的是展平对象,即删除带有数字键的嵌套结构并具有一维结构。 Luckily somebody has written a function that does this:

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-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2022-08-18
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多