合并来自 2 个数组的数据并重命名键
Merge data from 2 arrays and rename keys
我正在尝试从 2 个端点转换数据以模拟基本 table UI,但目前无法访问数据库。我玩过 lodash 并取得了一些成功,能够根据使用 _.defaults 等的引用合并两个数组,但没有成功。
我正在尝试按行 ID 在平面 table 中显示数据,新插入的键用作列引用
BusData1 = [
{
id: 1,
ObjRef: 1,
ObjRefLabel: "ObjRef1 - Option 1",
ObjRefDesc: "Option 1 Desc",
parentId: null,
},
{
id: 12,
ObjRef: 1,
ObjRefLabel: "ObjRef1 - Option 2",
ObjRefDesc: "Option 2 Desc",
parentId: null,
},
];
OtherData2 = [
{
id: 21,
BusDataId: 1,
ObjRef: 1,
ObjRefDesc: "Desc",
},
{
id: 22,
BusDataId: 1,
ObjRef: 0,
ObjRefDesc: "Desc",
},
{
id: 31,
BusDataId: 1,
ObjRef: 1,
ObjRefDesc: "Desc",
},
{
id: 32,
BusDataId: 12,
ObjRef: 0,
ObjRefDesc: "Desc",
},
];
我正在尝试使用键值将数组 2 合并到数组 1 中,但是在插入到数组 1 中时,我正在尝试更新键以包含对象 ID,以便每个插入键都有一个唯一的引用。
Combined = [
{
id: 1,
ObjRef: 1,
BusDataId21ObjRef: 1,
BusDataId22ObjRef: 0,
BusDataId31ObjRef: 1,
ObjRefLabel: "Option 1",
ObjRefDesc: "Desc",
parentId: null,
},
{
id: 12,
ObjRef: 1,
BusDataId31ObjRef: 0,
ObjRefLabel: "Option 2",
ObjRefDesc: "Desc",
parentId: null,
},
];
到目前为止,我已经从另一个 Whosebug post 获得了以下内容,但我无法超越这个。
const combine = _.map(otherData2, function(row){
return _.defaults(row, _.find(otherData2, {BusDataID: row.id}
如有任何建议或指导,我们将不胜感激
一个简单的方法
遍历业务数据数组。对于每个业务数据项,在第二个数组中找到属于它的元素,并将它们作为额外条目插入。
BusData1 = [{
id: 1,
ObjRef: 1,
ObjRefLabel: "ObjRef1 - Option 1",
ObjRefDesc: "Option 1 Desc",
parentId: null,
},
{
id: 12,
ObjRef: 1,
ObjRefLabel: "ObjRef1 - Option 2",
ObjRefDesc: "Option 2 Desc",
parentId: null,
},
];
OtherData2 = [{
id: 21,
BusDataId: 1,
ObjRef: 1,
ObjRefDesc: "Desc",
},
{
id: 22,
BusDataId: 1,
ObjRef: 0,
ObjRefDesc: "Desc",
},
{
id: 31,
BusDataId: 1,
ObjRef: 1,
ObjRefDesc: "Desc",
},
{
id: 32,
BusDataId: 12,
ObjRef: 0,
ObjRefDesc: "Desc",
},
];
BusData1.forEach(business => {
OtherData2.filter(
other => other.BusDataId == business.id
).forEach(
other => {
business["BusDataId" + other.id + "ObjRef"] = other.ObjRef
})
})
console.log(BusData1)
优化
这是 O(n x m)。如果这对于庞大的数组来说还不够快,您可以利用已知的属性吗?
例如,如果对第二个数组中的项目进行排序,使得属于 BusData1 元素 1 的任何条目出现在属于 BusData1 元素 2 的条目之前,您可以通过一次传递完成,即 O(n +m).
我正在尝试从 2 个端点转换数据以模拟基本 table UI,但目前无法访问数据库。我玩过 lodash 并取得了一些成功,能够根据使用 _.defaults 等的引用合并两个数组,但没有成功。
我正在尝试按行 ID 在平面 table 中显示数据,新插入的键用作列引用
BusData1 = [
{
id: 1,
ObjRef: 1,
ObjRefLabel: "ObjRef1 - Option 1",
ObjRefDesc: "Option 1 Desc",
parentId: null,
},
{
id: 12,
ObjRef: 1,
ObjRefLabel: "ObjRef1 - Option 2",
ObjRefDesc: "Option 2 Desc",
parentId: null,
},
];
OtherData2 = [
{
id: 21,
BusDataId: 1,
ObjRef: 1,
ObjRefDesc: "Desc",
},
{
id: 22,
BusDataId: 1,
ObjRef: 0,
ObjRefDesc: "Desc",
},
{
id: 31,
BusDataId: 1,
ObjRef: 1,
ObjRefDesc: "Desc",
},
{
id: 32,
BusDataId: 12,
ObjRef: 0,
ObjRefDesc: "Desc",
},
];
我正在尝试使用键值将数组 2 合并到数组 1 中,但是在插入到数组 1 中时,我正在尝试更新键以包含对象 ID,以便每个插入键都有一个唯一的引用。
Combined = [
{
id: 1,
ObjRef: 1,
BusDataId21ObjRef: 1,
BusDataId22ObjRef: 0,
BusDataId31ObjRef: 1,
ObjRefLabel: "Option 1",
ObjRefDesc: "Desc",
parentId: null,
},
{
id: 12,
ObjRef: 1,
BusDataId31ObjRef: 0,
ObjRefLabel: "Option 2",
ObjRefDesc: "Desc",
parentId: null,
},
];
到目前为止,我已经从另一个 Whosebug post 获得了以下内容,但我无法超越这个。
const combine = _.map(otherData2, function(row){
return _.defaults(row, _.find(otherData2, {BusDataID: row.id}
如有任何建议或指导,我们将不胜感激
一个简单的方法
遍历业务数据数组。对于每个业务数据项,在第二个数组中找到属于它的元素,并将它们作为额外条目插入。
BusData1 = [{
id: 1,
ObjRef: 1,
ObjRefLabel: "ObjRef1 - Option 1",
ObjRefDesc: "Option 1 Desc",
parentId: null,
},
{
id: 12,
ObjRef: 1,
ObjRefLabel: "ObjRef1 - Option 2",
ObjRefDesc: "Option 2 Desc",
parentId: null,
},
];
OtherData2 = [{
id: 21,
BusDataId: 1,
ObjRef: 1,
ObjRefDesc: "Desc",
},
{
id: 22,
BusDataId: 1,
ObjRef: 0,
ObjRefDesc: "Desc",
},
{
id: 31,
BusDataId: 1,
ObjRef: 1,
ObjRefDesc: "Desc",
},
{
id: 32,
BusDataId: 12,
ObjRef: 0,
ObjRefDesc: "Desc",
},
];
BusData1.forEach(business => {
OtherData2.filter(
other => other.BusDataId == business.id
).forEach(
other => {
business["BusDataId" + other.id + "ObjRef"] = other.ObjRef
})
})
console.log(BusData1)
优化
这是 O(n x m)。如果这对于庞大的数组来说还不够快,您可以利用已知的属性吗?
例如,如果对第二个数组中的项目进行排序,使得属于 BusData1 元素 1 的任何条目出现在属于 BusData1 元素 2 的条目之前,您可以通过一次传递完成,即 O(n +m).