创建JSON - 部分循环,部分纯字符串

时间:2017-06-20 08:51:09

标签: javascript jquery json

我有以下代码,它循环遍历DOM,寻找ID为" sale - "的元素,其中包含属性" 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+",")
});

这有效,输出为:

enter image description here

现在,当我想在循环之前和之后应用一些静态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
]
  }
});

1 个答案:

答案 0 :(得分:2)

首先,通过在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可以改进,但您尚未说明您希望定位哪个属性。