我有下面的代码,它在 DOM 中循环查找具有以“sale-”开头的 id 和属性“data-id”的元素,捕获值,然后去除左方括号和右方括号 -将其全部推送到一个 JSON 对象中:
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+",")
});
这有效,输出是:
现在,当我想在循环前后应用一些静态 JSON 代码时,问题就来了。
我想要像下面这样的东西:
// static
dataLayer.push({
'ecommerce': {
'impressions': [
// loop portion
{"id":50450},
{"id":49877},
{"id":49848},
{"id":49912},
{"id":49860},
{"id":49825},
{"id":48291},
{"id":49667},
// static
]
}
});
最佳答案
首先,您可以通过在 jQuery 对象上调用 map()
来简化数组的创建。从那里您可以简单地将结果数组添加到具有所需结构的对象中。试试这个:
var idArr = $("div[id^='sale-']").map(function() {
var id = this.attributes[2].value.replace(/\[|\]/gi, "");
return { id: +id };
}).get();
dataLayer.push({
ecommerce: {
impressions: idArr
}
});
另请注意,this.attributes[2].value
可以改进,但您没有说明您希望以哪个属性为目标。
关于javascript - 创建 JSON - 部分循环,部分纯字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44648219/