如何正确使用 dataLayer.push() 来更新数组中嵌套对象的值?
How to properly use dataLayer.push(), to update values, of nested objects, in an array?
这是我的数据层数组:
dataLayer = [{
'giftBatch' : {
'giftID': '',
'giftAmount': 0,
'giftCount': 0,
'giftUpdate': {
'giftPhase': 'Gift Empty'
}
},
'txBatch': {
'txID': '',
'txTotal': 0,
'txURL': window.location.href,
'txUpdate': {
'txPhase': 'Transaction Opened',
'txT0': new Date(),
'txT1': ''
'txT2': ''
}
}
}];
控制台结果为:Array [Object1]
Object1 根据需要包含 'giftBatch' 和 'txBatch' 对象。
我有一个稍后触发的触发器来更新数据层中的对象。
例如,将 'giftAmount' 更新为 50,将 'giftCount' 更新为 1。
我已经尝试了以下(我只是展示了我修改'one object at a time'失败的尝试),
尝试 1:
dataLayer.push({giftAmount : 50});
结果:
数组 [object1, object2]
Object1同上,
Object2 是 属性 为 'Gift Amount' 的新对象:50,
尝试 2:
dataLayer.push({giftBatch.giftAmount: 222});
结果: 语法错误:缺少:在 属性 id
之后
尝试 3:
dataLayer.push({'giftBatch.giftAmount' : 50});
结果:
数组 [object1, object2]
Object1同上,
Object2 是一个新对象 属性 'giftBatch.giftAmount': 50
我做错了什么?
根据此处的数据层部分:https://support.google.com/tagmanager/answer/6106899?hl=en
我应该能够编辑嵌套对象值。
PS。这就是我现在正在使用的,它确实有效。但是,为什么 push 不起作用?
dataLayer[index].giftBatch.giftAmount = 50;
其中index为Object2的索引。
任何帮助都会很棒。
谢谢。
编辑 dataLayer 的现有内容是不好的做法,但您应该只需要像这样发送覆盖 属性 值:
dataLayer.push({'giftBatch':{'giftAmount' : 50}});
标签管理器最迟在 Object
开始,并且会不断回顾之前的对象以确定每个 DataLayer 变量的当前设置,因此只有 giftBatch.giftAmount
被新推送覆盖。
这里是一个预览调试器的例子,它显示了一个新的 test
对象的数据层合并视图,该对象具有以前消息的属性:
解释此调试器数据层视图
在这种情况下,之前的消息 (#4 and/or #5) 以 最小值 推送:
{test:{test:8}} // #6 does not contain test.test so it is from earlier
或达到 最大值 他们本可以推动:
{test:{test:..,foo:..,test3:..}} // #4 if it's been completely shadowed
{test:{test:8,foo:..,test3:..}} // #5 if it has test.test, must have 8
#3 和#7 之间不能触发任何标签,因为 Messages
是缺少 event
属性的对象,因此当下次可能发生跟踪时,#4 中的任何阴影值都应被视为不可访问在事件 #7 上触发的标签上。
这是我的数据层数组:
dataLayer = [{
'giftBatch' : {
'giftID': '',
'giftAmount': 0,
'giftCount': 0,
'giftUpdate': {
'giftPhase': 'Gift Empty'
}
},
'txBatch': {
'txID': '',
'txTotal': 0,
'txURL': window.location.href,
'txUpdate': {
'txPhase': 'Transaction Opened',
'txT0': new Date(),
'txT1': ''
'txT2': ''
}
}
}];
控制台结果为:Array [Object1]
Object1 根据需要包含 'giftBatch' 和 'txBatch' 对象。
我有一个稍后触发的触发器来更新数据层中的对象。
例如,将 'giftAmount' 更新为 50,将 'giftCount' 更新为 1。
我已经尝试了以下(我只是展示了我修改'one object at a time'失败的尝试),
尝试 1:
dataLayer.push({giftAmount : 50});
结果:
数组 [object1, object2]
Object1同上,
Object2 是 属性 为 'Gift Amount' 的新对象:50,
尝试 2:
dataLayer.push({giftBatch.giftAmount: 222});
结果: 语法错误:缺少:在 属性 id
之后尝试 3:
dataLayer.push({'giftBatch.giftAmount' : 50});
结果:
数组 [object1, object2]
Object1同上,
Object2 是一个新对象 属性 'giftBatch.giftAmount': 50
我做错了什么?
根据此处的数据层部分:https://support.google.com/tagmanager/answer/6106899?hl=en
我应该能够编辑嵌套对象值。
PS。这就是我现在正在使用的,它确实有效。但是,为什么 push 不起作用?
dataLayer[index].giftBatch.giftAmount = 50;
其中index为Object2的索引。
任何帮助都会很棒。
谢谢。
编辑 dataLayer 的现有内容是不好的做法,但您应该只需要像这样发送覆盖 属性 值:
dataLayer.push({'giftBatch':{'giftAmount' : 50}});
标签管理器最迟在 Object
开始,并且会不断回顾之前的对象以确定每个 DataLayer 变量的当前设置,因此只有 giftBatch.giftAmount
被新推送覆盖。
这里是一个预览调试器的例子,它显示了一个新的 test
对象的数据层合并视图,该对象具有以前消息的属性:
解释此调试器数据层视图
在这种情况下,之前的消息 (#4 and/or #5) 以 最小值 推送:
{test:{test:8}} // #6 does not contain test.test so it is from earlier
或达到 最大值 他们本可以推动:
{test:{test:..,foo:..,test3:..}} // #4 if it's been completely shadowed
{test:{test:8,foo:..,test3:..}} // #5 if it has test.test, must have 8
#3 和#7 之间不能触发任何标签,因为 Messages
是缺少 event
属性的对象,因此当下次可能发生跟踪时,#4 中的任何阴影值都应被视为不可访问在事件 #7 上触发的标签上。