2017-06-20 35 views
1

Ich habe den folgenden Code, der durch das DOM auf der Suche nach Elementen, die eine ID haben mit "sale-", mit einem Attribut "Data-ID", die Erfassung des Werts, dann die Öffnung Strippen und eckigen Klammern schließen - alles in ein JSON-Objekt drückt:Erstellen von JSON - Teil Schleife, Teil einfache Zeichenfolge

els = $("div[id^='sale-']"); 
Array.prototype.forEach.call(els, function(el) { 
var id = el.attributes[2].value.replace(/\[|\]/gi, ""); 

var jsonObject = {"id" :+id}; 

var myJSON = JSON.stringify(jsonObject); 
console.log(myJSON+",") 
}); 

Dies funktioniert und der Ausgang ist:

enter image description here

Nun ist das Problem kommt, wenn ich einige anwenden möchten Statischer JSON-Code vor und nach der Schleife.

würde ich so etwas wie die unten mögen:

// static 
dataLayer.push({ 
    'ecommerce': { 
    'impressions': [ 

// loop portion 
{"id":50450}, 
{"id":49877}, 
{"id":49848}, 
{"id":49912}, 
{"id":49860}, 
{"id":49825}, 
{"id":48291}, 
{"id":49667}, 

// static 
] 
    } 
}); 

Antwort

2

Zum einen können Sie die Array-Erstellung viel einfacher machen, indem map() auf dem Objekt jQuery Aufruf. Von dort können Sie das resultierende Array einfach zu einem Objekt mit der gewünschten Struktur hinzufügen. Versuchen Sie folgendes:

var idArr = $("div[id^='sale-']").map(function() { 
    var id = this.attributes[2].value.replace(/\[|\]/gi, ""); 
    return { id: +id }; 
}).get(); 

dataLayer.push({ 
    ecommerce: { 
    impressions: idArr 
    } 
}); 

Beachten Sie auch, dass this.attributes[2].value verbessert werden kann, aber Sie haben nicht angegeben, welche Attribut Sie erwarten, dass Ziel.