You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个对象的值合并为数组对象并补全缺失字段为‘-’

问题描述

我有如下两个JSON对象:

var obj1 = { "name":"rencho", "age":23, "occupation":"SE" } 
var obj2 = { "name":"manu", "age":23, "country":"india" }

期望得到如下输出:

var result = { 
  "name":["rencho", "manu"], 
  "age":[23, 23], 
  "country":["-", "india"], 
  "occupation": ["SE", "-"], 
}

我尝试了以下代码片段:

let arrGlobal = [] 
arrGlobal.push(obj1); 
arrGlobal.push(obj2); 
let mergedResult = arrGlobal.reduce(function(r, e) { 
  return Object.keys(e).forEach(function(k) { 
    if(!r[k]) r[k] = [].concat(e[k]) 
    else r[k] = r[k].concat(e[k]) 
  }), r 
}, {}) 
console.log(mergedResult);

但该代码无法在JSON对象中输出‘-’,恳请您提供帮助!

解决方案

你的思路方向是对的,但缺少了**为每个对象中不存在的属性补充'-'**的逻辑。我们需要先收集所有对象的所有键,然后遍历每个键和每个对象,判断对象是否包含该键,存在则取对应值,不存在则用'-'填充。

修改后的代码如下:

var obj1 = { "name":"rencho", "age":23, "occupation":"SE" };
var obj2 = { "name":"manu", "age":23, "country":"india" };

const arrGlobal = [obj1, obj2];
// 收集所有唯一的键
const allKeys = [...new Set(arrGlobal.flatMap(obj => Object.keys(obj)))];

const mergedResult = allKeys.reduce((result, key) => {
  // 遍历每个对象,获取对应值或'-'
  result[key] = arrGlobal.map(obj => obj.hasOwnProperty(key) ? obj[key] : '-');
  return result;
}, {});

console.log(mergedResult);

代码解释:

  • 收集所有键:通过flatMap提取每个对象的键,再用Set去重,得到所有需要处理的属性名。
  • 构建结果对象:遍历每个键,对每个对象检查是否包含该键——如果有就取对应值,没有就用'-'代替,最终把这些值组成数组作为结果对象中该键的值。

这样就能完美得到你期望的输出啦!

内容的提问来源于stack exchange,提问作者user9777762

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:27:23