javascript - 在合并对象的键中创建值数组

标签 javascript arrays json object assign

使用 javascript,我试图比较嵌套 JSON 对象中的值。我想使用 Object.assign() 方法合并对象,但生成值数组。如果在其中一个对象中未找到键/值对,则数组应包含空值;

例如我有这 3 个输入对象:

let O1 = [
    { "group1": { "attr1": 1 } },
    { "group2": { "attr1": 2 } }
]

let O2 = [
    { "group2": { "attr1": 3 } },
    {
        "group3": {
            "attr1": 4,
            "attr2": 5
        }
    }
]

let O3 = [
    { "group1": { "attr1": 6 } },
    { "group3": { "attr1": 7 } }
]

我想将它们合并到这个新对象中:

let result = [
    { "group1": { "attr1": [1, null, 6] } },
    { "group2": { "attr1": [2, 3, null] } },
    {
        "group3": {
            "attr1": [null, 4, 7],
            "attr2": [null, 5, null]
        }
    }
]

最佳答案

  const result = [];

  for(var [index, array] of [O1, O2, O3].entries()){
     for(var [arrayIndex, obj] of array.entries()){
        (function copy(obj, res){
           for(var [key, value] of Object.entries(obj)){
              if(typeof value === "object"){
                 copy(value, res[key] || (res[key] = {}));
              } else {
                 if(!res[key]) res[key] = [];
                 res[key][index] = value;
             }
          }
        })(obj, result[arrayIndex] || (result[arrayIndex] = {}));
     }
  }

长话短说:改变你的数据结构......

关于javascript - 在合并对象的键中创建值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48212995/

相关文章:

javascript - 如何使用 Node js 将 json 发送到我的 View

javascript - 将动态 JSON 数据嵌套到 Extjs 模型

javascript 将数组的元素映射到 HTML DIV 模板

json - 反序列化嵌套的 JSON,或者简单地在 Go 中传递它

Java-Json反序列化数据【】

javascript - 无法在 React Js 中工作的 Chart js 中获取条形图颜色

javascript - 在路由器主干中插入定时器功能

ios - 如何将数组保存为iPhone中的字符串?

java - 将 double 组从 Python 移至 Java

json - Grails-渲染的Json文件太大,无法进行客户端操作