在数组对象中分组

Grouping in an array object

本文关键字:对象 数组      更新时间:2023-09-26

我有 2 个以下格式的 javascript 数组对象:

 var input1 = 
    {
      "a" : [
       {
         "id" : 1,
         "name" : "gh"
       }],
      "b" : [
       {
         "id" : 2,
         "name" : "ab"
       }]
    }
var input2 =
{
 "a" : [
       {
         "id" : 3,
         "name" : "cd"
       }],
       "b" : [
       {
         "id" : 4,
         "name" : "gh"
       }]
}

我希望通过以下方式格式化它:

var finaloutput = 
    {
      "a" : [
       {
         "id" : 1,
         "name" : "gh"
       },
        {
         "id" : 3,
         "name" : "cd"
       }
        ],
      "b" : [
       {
         "id" : 2,
         "name" : "ab"
       },
       {
         "id" : 4,
         "name" : "gh"
       }
      ]      
    }

我正在尝试在不使用任何外部库的情况下对数组进行分组。不太熟悉 javascript 中的 linq,任何可用的内置函数或任何引用?

编辑:我对输入进行了更改,因为这是我期望的输入

试试这个,当然这只是一个快速的实现 - 但它应该让你走上正确的道路:

var finaloutput = Object.keys(input1).reduce((p,v) => {
  p[v] = (input1[v].concat(input2[v]))
  return p;
}, {})

返回 =>

JSON.stringify(finaloutput, null, 2);

"{
  "a": [
    {
      "id": 1,
      "name": "gh"
    },
    {
      "id": 3,
      "name": "cd"
    }
  ],
  "b": [
    {
      "id": 2,
      "name": "ab"
    },
    {
      "id": 4,
      "name": "gh"
    }
  ]
}"

创建一个地图并填充它,检查密钥是否存在,具有任何给定数量的输入

var allInputs = [];
allInputs.push(input1);
allInputs.push(input2);
var result = [];
for(var x in allInputs)
{
    var inp = allInputs[x];
    for(var i in inp)
    {
        if(result[i] == undefined)
        {
            result[i] = [];
        }
        result[i].push(inp[i]);
    }
}
    var finalOutput;
    var input1 = {
            "a": [{
                    "id": 1,
                    "name": "gh"
            }],
            "b": [{
                    "id": 2,
                    "name": "ab"
            }]
    };
    var input2 = {
            "a": [{
                    "id": 3,
                    "name": "cd"
            }],
            "b": [{
                    "id": 4,
                    "name": "gh"
            }]
    };
    input1.a.push(input2.a[0]);
    input1.b.push(input2.b[0]);
    finalOutput = input1;
    //////////////////////////////////////////////////////    
    If the arrays are dynamic you can do the operation as follows:
    var input1 = {
        "a": [
          {
                "id": 1,
                "name": "gh"
          }
        ],
        "b": [
          {
                "id": 2,
                "name": "ab"
          }
        ]
}
var input2 = {
        "a": [
          {
                "id": 3,
                "name": "cd"
          }
        ],
        "b": [
          {
                "id": 4,
                "name": "gh"
          }
        ]
}
var inputNewLengthA = input1.a.length;
var inputNewLengthB = input1.b.length;
var finalOutput;
for(var v=0;v<inputNewLengthA;v++){
    input1.a.push(input2.a[v]);
}
for(var n=0;n<inputNewLengthB;n++){
    input1.b.push(input2.b[n]);
}
finalOutput = input1;
///////////////////////////////////////
Note: You can also use one for loop only if your array lengths are   
equal.