如何将两个JSON对象合并为含ec_Event字段的数组结构?
问题:将遍历得到的多个对象合并为指定结构
我正在遍历buyProductData对象并获取data属性,之后解析为JSON:
Object.entries(buyProductData).forEach(entry => { const [key, value] = entry; if(typeof value === 'object') { const data = JSON.parse(value.getAttribute('data-tracking-payload')); console.log(data); } });
console.log(data)返回两个对象:
{pid: '9783834649867', sku: '9783834649867', name: 'Book 1'} {pid: '9683271123215', sku: '7552163721', name: 'Book 2'}
我想将这两个对象合并成如下结构:
{ ec_Event : [ { pid: '9783834649867', sku: '9783834649867', name: 'Book 1' }, { pid: '9683271123215', sku: '7552163721', name: 'Book 2' } ] }
尝试了let merge = {...data}但无法完成合并,求解决方法。
解决方案
你需要先创建一个数组来收集所有解析后的对象,最后再把这个数组放到ec_Event字段中。{...data}只能扩展单个对象,无法实现多个对象的收集合并,正确的做法如下:
// 初始化空数组用于收集数据 const eventArray = []; Object.entries(buyProductData).forEach(entry => { const [key, value] = entry; if(typeof value === 'object') { const data = JSON.parse(value.getAttribute('data-tracking-payload')); // 将每个解析后的对象加入数组 eventArray.push(data); } }); // 组合成目标结构 const result = { ec_Event: eventArray }; console.log(result);
也可以用更简洁的链式写法实现:
const result = { ec_Event: Array.from(Object.entries(buyProductData)) .filter(([key, value]) => typeof value === 'object') .map(([key, value]) => JSON.parse(value.getAttribute('data-tracking-payload'))) }; console.log(result);
这两种方式都能把遍历得到的多个对象收集到数组中,最终生成你需要的ec_Event结构。
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

