如何使用Javascript在单个对象中映射多个对象数据? [英] How to map Multiple object data in a Single object using 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屋!