合并JSON对象时,如何追加相同键对应的数组值?
如何合并两个JSON对象并合并指定键的数组值而非覆盖?
我有两个JSON对象,合并时第一个对象里ST键的数组会被第二个对象的ST数组覆盖,现在需要实现数组值的合并而非覆盖:
对象1:
{"ST": ["Bin", "No", "Comp"], "OSS": ["Class"]}
对象2:
{"ST": ["Pro", "SU"]}
期望输出:
{"ST": ["Bin", "No", "Comp","Pro", "SU"], "OSS": ["Class"]}
解决方案(JavaScript示例)
你可以写一个自定义合并函数,针对数组类型的键做特殊处理,把两个数组合并,其他类型的键按常规逻辑处理:
function mergeObjects(obj1, obj2) { // 复制原对象,避免修改原始数据 const merged = {...obj1}; for (const key in obj2) { if (obj2.hasOwnProperty(key)) { // 检查当前键在两个对象中是否都是数组 if (Array.isArray(merged[key]) && Array.isArray(obj2[key])) { // 合并数组,扩展运算符或concat都可以用 merged[key] = [...merged[key], ...obj2[key]]; } else { // 非数组类型直接覆盖或添加 merged[key] = obj2[key]; } } } return merged; } // 测试代码 const obj1 = {"ST": ["Bin", "No", "Comp"], "OSS": ["Class"]}; const obj2 = {"ST": ["Pro", "SU"]}; const mergedResult = mergeObjects(obj1, obj2); console.log(mergedResult);
运行后就能得到你想要的合并结果。
额外说明
- 这个函数不会修改原始的两个对象,而是返回一个新的合并对象
- 如果需要合并数组时去重,可以把数组合并的代码改成:
这样就能自动去除数组里的重复元素merged[key] = [...new Set([...merged[key], ...obj2[key]])];
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

