如何使用jQuery合并JSON中的object_a与object_b对象?
解决方案
你可以通过遍历对象属性、筛选非空值的方式合并object_a和object_b,同时保留原数据中的其他对象属性。以下是具体实现:
原生JavaScript实现
// 定义处理单个数据项的函数 function mergeItem(item) { const merged = {}; // 先处理object_a,存入非空属性 Object.keys(item.object_a).forEach(key => { const val = item.object_a[key]; if (val.trim() !== '') { merged[key] = val; } }); // 再处理object_b,用非空属性补充/覆盖 Object.keys(item.object_b).forEach(key => { const val = item.object_b[key]; if (val.trim() !== '') { merged[key] = val; } }); // 保留原数据的其他属性,替换为合并后的object const result = {...item}; delete result.object_a; delete result.object_b; result.object = merged; return result; } // 处理整个数组 const processedData = originalData.map(mergeItem);
jQuery实现
如果一定要用jQuery的工具方法,可基于$.each和$.map实现:
function mergeItem(item) { const merged = {}; // 遍历object_a,筛选非空值 $.each(item.object_a, function(key, val) { if (val.trim() !== '') { merged[key] = val; } }); // 遍历object_b,补充非空值 $.each(item.object_b, function(key, val) { if (val.trim() !== '') { merged[key] = val; } }); // 复制原对象并替换属性 const result = $.extend({}, item); delete result.object_a; delete result.object_b; result.object = merged; return result; } // 处理数组 const processedData = $.map(originalData, mergeItem);
说明
- 核心逻辑:优先保留
object_a和object_b中的非空属性值,确保每个键最终对应有效的内容; - 原数据中的其他属性(如你示例中的
..some other objects..)会被完整保留; - 如果遇到
object_a和object_b同一键都有非空值的情况,当前逻辑会用object_b的值覆盖object_a,你可以调整遍历顺序来改变优先级。
内容的提问来源于stack exchange,提问作者Noxius
相关产品推荐
相关产品推荐

