有没有办法删除数据层中的对象?

时间:2016-09-22 08:52:59

标签: javascript jquery google-adwords

有没有办法删除数据层中的对象?如图所示,有两个' google_tag_params'宾语。我只需要一个。第一次推送是onload然后第二次推送在js调用中的dataLayer。我需要在推送第二个之前先删除推送的一个,这样就没有重复的“google_tag_params'在数据层

enter image description here

dataLayer.push(
            {   "google_tag_params":google_tag_params, 
                "ecomm_prodid":document.getElementById('prodid').value,
                "ecomm_pagetype": document.getElementById('pageType').value,
                "ecomm_totalvalue": price.toFixed(2),
            });

2 个答案:

答案 0 :(得分:2)

使用数组Filter

//es6
dataLayer = dataLayer.filter(x=>!x.google_tag_params);//removes any object
            // which has a key google_tag_params, guessing that its value won't be falsy
 // better use x => !(google_tag_params in x)
dataLayer.push(newGoogleTagParam);

//es5
dataLayer = dataLayer.filter(function (x) {
  return !x.google_tag_params;
});
dataLayer.push(newGoogleParam);

答案 1 :(得分:0)

您可以通过setting键将键从未定义的值中删除。示例:

window.dataLayer.push(function(){ this.set('google_tag_params') });

请注意,在您的情况下,google_tag_params 可能被推两次是有充分理由的。并且,只要两个对象都包含各自标签的所有相关数据,每个标签就会触发相关数据。但是,如果您要绝对确定第二个操作不会继承第一个操作的数据,则可以在两次推入之间运行上述代码,以清除该键的数据。