2015-11-21 1 views
0

Lorsque vous utilisez Google Analytics DataLayer sur votre site Web, vous l'avez sous forme de variable de données globale. Vous pouvez y ajouter vos propres variables d'événements.Comment google DataLayer peut-il être converti en objet javascript avec des valeurs clés pour les variables?

Comment convertir toutes les variables à l'intérieur à un objet comme

{var:value} 
+0

La couche de données est un objet JSON spécifique à GTM. Pouvez-vous être plus précis sur ce que vous voulez faire? – nyuen

+0

Je voudrais accéder à ses valeurs quelque chose comme MyDataLayerVar.varName. Surtout les variables qui ne sont pas standard (poussé par les utilisateurs) –

+0

J'ai .js dans les sites Web faisant une analyse, et tiens à considérer certaines vars de DataLayer à envoyer aux serveurs –

Répondre

0

Vous y accéder comme tout autre objet:

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

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

vous ne savez certainement pas de quoi je parle . La variable dataLayer est un tableau. –

+0

Désolé, mon mauvais pour la mauvaise syntaxe, longue journée pour moi. Mais vous devez 1) rafraîchir votre GTM car dataLayer est un objet (plus précisément un tableau d'objets, mais communément appelé simplement un objet) et vous avez simplement besoin de Google que si vous mettez autant d'effort pour regarder plus dans ce 2) fournir des commentaires constructifs plutôt que des remarques négatives sur son manque de compréhension à la lumière de données médiocres. – nyuen

0

Je ne comprends pas tout à fait votre réponse chauffé à nyuens réponse. Tout d'abord, comme il s'agit d'un javascript, un tableau est également un objet, d'autre part, dataLayer est un tableau d'objets ou, comme nous l'appelons en JavaScript, un objet (appelé JavaScript Object Notation après tout). Vous avez donc un tableau avec des index numériques où chaque élément est un objet (qui peut à son tour contenir d'autres tableaux et objets).

Je ne suis pas du tout d'accord avec la suggestion de nyuen d'adresser des éléments dans dataLayer avec l'index numérique. Si vous transmettez des données à votre DataLayer avant que le code du gestionnaire de balises dataLayer [0] contienne vos données personnalisées, dans le cas contraire, il contiendra l'événement gtm.load et les données associées. Donc ce n'est pas fiable.

Cependant, il semble que vous voulez vraiment, c'est d'aplatir l'objet, c'est-à-dire supprimer la structure imbriquée avec des clés numériques et avoir une structure unidimensionnelle. 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; 
}; 

Cela fait un objet « unidimensionnel » d'un objet imbriqué. Habituellement, cela signifie que les clés portant le même nom seront écrasées par le dernier élément respectif. C'est à dire.

dataLayer = [ 
    {'key':value1}, 
    {'key':value2}, 
] 

se traduirait par simple

{'key':value2} 

depuis la deuxième "clé" écrasez la première. Cependant, la fonction pallie ci-dessus en stockant l'indice dans le cadre du nom de la clé, de sorte que vous obtiendrez

{'0.key':value1, '1.key':value2} 

ce qui signifie un peu, malheureusement, vous ne pouvez pas utiliser la syntaxe de point et doivent adresse les éléments avec supports coudés:

yourvariablename['0.key']