如何使用Javascript在单个对象中映射多个对象数据? [英] How to map Multiple object data in a Single object using Javascript?

查看:48
本文介绍了如何使用Javascript在单个对象中映射多个对象数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

var sourceA = [{ pid: 1, data_a: 23, data_x: 23},{ pid: 2, data_a: 23 ,data_x: 23}];

var sourceB = [{ pid: 1, data_a: 34, data_x: 34 },{ pid: 2, data_a: 34, data_x: 34 }];

var sourceC = [{ pid: 1, data_a: 35, data_x: 34 },{ pid: 2, data_a: 35, data_x: 34 }];

我正在从多个来源获取以下数据.在那些对象中有一个字段 PID,其中一个是常见的.所以,我想根据PID组合起来.

I am getting following data from multiple source. In those object there is a field PID which one is common. So , I want to combined it according to PID.

预期输出:

var p = [{
  "pid": 1,
  "array": [{"data_a": 33,"data_x": 30},{"data_a": 33,"data_x": 30},{"data_a": 33,"data_x": 30}]
},{
  "pid": 2,
  "array": [{"data_a": 33,"data_x": 30},{"data_a": 33,"data_x": 30},{"data_a": 33,"data_x": 30}]
}]

我尝试了以下

 var result = sourceA.map((obj, index) => Object.assign({}, sourceA[index], sourceB[index], sourceC[index]));

但是我没有得到我所期望的.然后我尝试了 如何按键对对象数组进行分组但我的来源是 3 而不是 1.

But I am not getting what I expected. then I tried with How to group array of objects by key But My source is 3 not 1.

推荐答案

var p = [{
  "pid": 1,
  "array": [{"data_a": 33,"data_x": 30},{"data_a": 33,"data_x": 30},{"data_a": 33,"data_x": 30}]
},{
  "pid": 2,
  "array": [{"data_a": 33,"data_x": 30},{"data_a": 33,"data_x": 30},{"data_a": 33,"data_x": 30}]
}]

由于您的问题不清楚我们可以得到33"和30"值,我假设您打错了,预期结果应该是这样的:

As it is not clear from your question were from we could get "33" and "30" values i assume you made a typo, and expected result should be like this:

var p = [{
  "pid": 1,
  "array": [{"data_a": 23,"data_x": 23},{"data_a": 34,"data_x": 34},{"data_a": 35,"data_x": 34}]
},{
  "pid": 2,
  "array": [{"data_a": 23,"data_x": 23},{"data_a": 34,"data_x": 34},{"data_a": 35,"data_x": 34}]
}]

考虑到上述情况,您可以尝试使用少量循环按 pid 对数据进行分组,然后按预期对其进行格式化

considering the above you may try to use few loops to group data by pid and then format it as expected

var sourceA = [{ pid: 1, data_a: 23, data_x: 23},{ pid: 2, data_a: 23 ,data_x: 23}];
var sourceB = [{ pid: 1, data_a: 34, data_x: 34 },{ pid: 2, data_a: 34, data_x: 34 }];
var sourceC = [{ pid: 1, data_a: 35, data_x: 34 },{ pid: 2, data_a: 35, data_x: 34 }];

function combineInputs(...inputs) {

  var combined = {};
  for (var i = 0; i< inputs.length; i++) {
    for (var j = 0; j < inputs[i].length; j++) {
      var record = inputs[i][j];

      if (!combined[record.pid]) {
        combined[record.pid] = []
      }
      var tmp = Object.assign({}, record);
      delete tmp.pid;
      combined[record.pid].push(tmp);
    }
  }

  var result = [];
  for (var key in combined) {
    if (combined.hasOwnProperty(key)) {
      result.push({
        pid: key,
        array: combined[key]
      });
    }
  }

  return result;
}

var expected = combineInputs(sourceA, sourceB, sourceC);
console.log(expected);

结果应该看起来像预期的那样.可能这不是最好的解决方案,但它有效

Result should look like expected. Probably this is not the best solution, but it works

这篇关于如何使用Javascript在单个对象中映射多个对象数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆