如何显示依赖于父值和子值的输出



我有输入数据,哪个beneficiaryPayId和parentBenePayId有父子关系:

var input = {
"payBeneficiaries": [{
"beneficiaryPayId": "c946c383-6a64-476a-b903-3bc8baaa716c",
"parentBenePayId": "",
"beneficiary": {
"topId": "06d5e9eb-7110-4c90-aa77-97b3d8ca2c9a",
"businessId": "15c58e7d-18dd-49e3-ad86-0bf3f6e5013a",
"businessName": "Royal NNJ p.l.c."
},
},
{
"beneficiaryPayId": "b1da8c12-cb0d-4b0e-8a30-75362dbf73b4",
"parentBenePayId": "c946c383-6a64-476a-b903-3bc8baaa716c",
"beneficiary": {
"topId": "d56eebf3-b97b-429c-ae09-e488d85169cf",
"businessId": "a52b0a2d-532b-4fd1-b667-c25691217e5e",
"businessName": "Hammes Macejkovic and Steuber"
},
},
{
"beneficiaryPayId": "f5f04b9b-5711-44d5-b06e-fb525d269310",
"parentBenePayId": "c946c383-6a64-476a-b903-3bc8baaa716c",
"beneficiary": {
"topId": "96737c75-7a7f-4edc-a6b5-cb3149879a78",
"businessId": "4e3b061d-5706-45b4-925d-cab675c95d98",
"businessName": "Torphy-Osinski"
},
},
{
"beneficiaryPayId": "2a027e32-ac76-48e4-9ab5-bec130211107",
"parentBenePayId": "c946c383-6a64-476a-b903-3bc8baaa716c",
"beneficiary": {
"topId": "0f9c1849-2c1d-42ae-bdb1-40d83d912171",
"businessId": "92ea79f3-ed3f-42e1-8f4c-9e1ccb3d746a",
"businessName": "Schinner Inc"
},
},
{
"beneficiaryPayId": "d0ec2133-fb2f-4cf2-8d2b-3d8d9eed7d09",
"parentBenePayId": "f5f04b9b-5711-44d5-b06e-fb525d269310",
"beneficiary": {
"topId": "54c30c9f-a792-4659-adfc-b4287994cf1e",
"businessId": "e6b95c56-ca17-40a4-b5f7-3a0c9fa9b327",
"businessName": "Ferry-Donnelly"
},
},
{
"beneficiaryPayId": "e0b87efe-1bd3-4584-b102-2210ab2bd8a7",
"parentBenePayId": "2a027e32-ac76-48e4-9ab5-bec130211107",
"beneficiary": {
"topId": "b934b36a-0ab5-4869-9220-3bfd90bfb956",
"businessId": "c47836bb-87e2-482b-bbf0-d42073c372c6",
"businessName": "Lueilwitz-Johns"
},
},
{
"beneficiaryPayId": "f58d63f6-e823-493a-acf4-226a9c4d21a1",
"parentBenePayId": "f5f04b9b-5711-44d5-b06e-fb525d269310",
"beneficiary": {
"topId": "4e86ab2e-3a2a-4914-a0b3-153439c4013b",
"businessId": "aead7de0-f2f3-46ce-a013-f83833b9ec0a",
"businessName": "Ward-Collier"
},
},
{
"beneficiaryPayId": "17263490-9b2b-4b87-a638-cbdaf0cd9daa",
"parentBenePayId": "f5f04b9b-5711-44d5-b06e-fb525d269310",
"beneficiary": {
"topId": "751b8076-d7ca-4cca-922b-aabcc4b39845",
"businessId": "6ae1d6e1-9a3b-482b-9c2a-861b3bea0cd4",
"businessName": "Nikolaus Dickinson and Wiegand"
},
},
{
"beneficiaryPayId": "71e36088-724f-4075-be14-5fdb37944447",
"parentBenePayId": "b1da8c12-cb0d-4b0e-8a30-75362dbf73b4",
"beneficiary": {
"topId": "a6c67099-9937-4daa-829f-9b91adfea9a1",
"businessId": "dbbb2e12-e50a-4905-93c1-29768b6ed74d",
"businessName": "Rath Group"
},
},
{
"beneficiaryPayId": "d50f34c9-9576-4511-9c49-4fe1fc296a57",
"parentBenePayId": "b1da8c12-cb0d-4b0e-8a30-75362dbf73b4",
"beneficiary": {
"topId": "12e65313-943a-406a-9771-bd8485a35862",
"businessId": "70d44d44-f7bf-4fd3-a475-378be757d86f",
"businessName": "MacGyver Inc"
},
}
] 
};

输出数据应为:

[{"orgHierarchy": ["Royal NNJ p.l.c."]
}, {
"orgHierarchy": ["Royal NNJ p.l.c.", "Hammes Macejkovic and Steuber"]
}, {
"orgHierarchy": ["Royal NNJ p.l.c.", "Torphy-Osinski"]
}, {
"orgHierarchy": ["Royal NNJ p.l.c.", "Schinner Inc"]
}, {
"orgHierarchy": ["Royal NNJ p.l.c.", "Torphy-Osinski", "Ferry-Donnelly"]
}, {
"orgHierarchy": ["Royal NNJ p.l.c.", "Schinner Inc", "Lueilwitz-Johns"]
}, {
"orgHierarchy": ["Royal NNJ p.l.c.", "Torphy-Osinski", "Ward-Collier"]
}, {
"orgHierarchy": ["Royal NNJ p.l.c.", "Torphy-Osinski", "Nikolaus Dickinson and Wiegand"]
}, {
"orgHierarchy": ["Royal NNJ p.l.c.", "Hammes Macejkovic and Steuber", "Rath Group"]
}, {
"orgHierarchy": ["Royal NNJ p.l.c.", "Hammes Macejkovic and Steuber", "MacGyver Inc"]
}]

这是我试图与带子项的父数据进行比较的代码,但我得到的响应(businessname(显示了多次,而orgHierarchy是一个硬编码值。

var mainData = input.payBeneficiaries
mainData.map((dta,key) => {
let result = mainData.map((parent) => {
let children = mainData.filter((child) => {
if (child.beneficiaryPayId=== parent.parentBenePayId) {
var employees = [];
var businessName = dta.beneficiary.businessName
employees.push({
"orgHierarchy": businessName
});
console.log(employees) 
}
})
})
})

Ciao,您可以过滤input值,找到father对象("parentBenePayId" === ""(。然后再次过滤input,查找子项和结果数组中的插入值,如下所示:

var input = {
"payBeneficiaries": [{
"beneficiaryPayId": "c946c383-6a64-476a-b903-3bc8baaa716c",
"parentBenePayId": "",
"beneficiary": {
"topId": "06d5e9eb-7110-4c90-aa77-97b3d8ca2c9a",
"businessId": "15c58e7d-18dd-49e3-ad86-0bf3f6e5013a",
"businessName": "Royal NNJ p.l.c."
},
},
{
"beneficiaryPayId": "b1da8c12-cb0d-4b0e-8a30-75362dbf73b4",
"parentBenePayId": "c946c383-6a64-476a-b903-3bc8baaa716c",
"beneficiary": {
"topId": "d56eebf3-b97b-429c-ae09-e488d85169cf",
"businessId": "a52b0a2d-532b-4fd1-b667-c25691217e5e",
"businessName": "Hammes Macejkovic and Steuber"
},
},
{
"beneficiaryPayId": "f5f04b9b-5711-44d5-b06e-fb525d269310",
"parentBenePayId": "c946c383-6a64-476a-b903-3bc8baaa716c",
"beneficiary": {
"topId": "96737c75-7a7f-4edc-a6b5-cb3149879a78",
"businessId": "4e3b061d-5706-45b4-925d-cab675c95d98",
"businessName": "Torphy-Osinski"
},
},
{
"beneficiaryPayId": "2a027e32-ac76-48e4-9ab5-bec130211107",
"parentBenePayId": "c946c383-6a64-476a-b903-3bc8baaa716c",
"beneficiary": {
"topId": "0f9c1849-2c1d-42ae-bdb1-40d83d912171",
"businessId": "92ea79f3-ed3f-42e1-8f4c-9e1ccb3d746a",
"businessName": "Schinner Inc"
},
},
{
"beneficiaryPayId": "d0ec2133-fb2f-4cf2-8d2b-3d8d9eed7d09",
"parentBenePayId": "f5f04b9b-5711-44d5-b06e-fb525d269310",
"beneficiary": {
"topId": "54c30c9f-a792-4659-adfc-b4287994cf1e",
"businessId": "e6b95c56-ca17-40a4-b5f7-3a0c9fa9b327",
"businessName": "Ferry-Donnelly"
},
},
{
"beneficiaryPayId": "e0b87efe-1bd3-4584-b102-2210ab2bd8a7",
"parentBenePayId": "2a027e32-ac76-48e4-9ab5-bec130211107",
"beneficiary": {
"topId": "b934b36a-0ab5-4869-9220-3bfd90bfb956",
"businessId": "c47836bb-87e2-482b-bbf0-d42073c372c6",
"businessName": "Lueilwitz-Johns"
},
},
{
"beneficiaryPayId": "f58d63f6-e823-493a-acf4-226a9c4d21a1",
"parentBenePayId": "f5f04b9b-5711-44d5-b06e-fb525d269310",
"beneficiary": {
"topId": "4e86ab2e-3a2a-4914-a0b3-153439c4013b",
"businessId": "aead7de0-f2f3-46ce-a013-f83833b9ec0a",
"businessName": "Ward-Collier"
},
},
{
"beneficiaryPayId": "17263490-9b2b-4b87-a638-cbdaf0cd9daa",
"parentBenePayId": "f5f04b9b-5711-44d5-b06e-fb525d269310",
"beneficiary": {
"topId": "751b8076-d7ca-4cca-922b-aabcc4b39845",
"businessId": "6ae1d6e1-9a3b-482b-9c2a-861b3bea0cd4",
"businessName": "Nikolaus Dickinson and Wiegand"
},
},
{
"beneficiaryPayId": "71e36088-724f-4075-be14-5fdb37944447",
"parentBenePayId": "b1da8c12-cb0d-4b0e-8a30-75362dbf73b4",
"beneficiary": {
"topId": "a6c67099-9937-4daa-829f-9b91adfea9a1",
"businessId": "dbbb2e12-e50a-4905-93c1-29768b6ed74d",
"businessName": "Rath Group"
},
},
{
"beneficiaryPayId": "d50f34c9-9576-4511-9c49-4fe1fc296a57",
"parentBenePayId": "b1da8c12-cb0d-4b0e-8a30-75362dbf73b4",
"beneficiary": {
"topId": "12e65313-943a-406a-9771-bd8485a35862",
"businessId": "70d44d44-f7bf-4fd3-a475-378be757d86f",
"businessName": "MacGyver Inc"
},
}
] 
};

let result = [];
let father = input.payBeneficiaries.filter(el => el.parentBenePayId === "")[0]
let children = input.payBeneficiaries.filter(el => el.parentBenePayId === father.beneficiaryPayId)
result.push({orgHierarchy: [father.beneficiary.businessName]})
children.forEach(child => {
result.push({orgHierarchy: [father.beneficiary.businessName, child.beneficiary.businessName]})
// children of child
let secondGeneration = input.payBeneficiaries.filter(el => el.parentBenePayId === child.beneficiaryPayId)
if(secondGeneration.length > 0) {
secondGeneration.forEach(gen => {
result.push({orgHierarchy: [father.beneficiary.businessName, child.beneficiary.businessName, gen.beneficiary.businessName]})
})
}
})
console.log(result)

方法:

您可以在parentId为空的基本条件下使用递归调用

const payBeneficiaryLookupById = payBeneficiaries.reduce(
(acc, pb) => ({ ...acc, [pb.beneficiaryPayId]: pb }),
{}
)
const getOrgHierarchy = (payBeneficiary, acc) => {
if (!payBeneficiary.parentBenePayId) {
return [payBeneficiary.beneficiary.businessName, ...acc]
} else {
return getOrgHierarchy(
payBeneficiaryLookupById[payBeneficiary.parentBenePayId],
[payBeneficiary.beneficiary.businessName, ...acc]
)
}
}
const res = payBeneficiaries.map((pb) => ({
orgHierarchy: getOrgHierarchy(pb, []),
}))

实施:

const { payBeneficiaries } = {
payBeneficiaries: [
{
beneficiaryPayId: "c946c383-6a64-476a-b903-3bc8baaa716c",
parentBenePayId: "",
beneficiary: {
topId: "06d5e9eb-7110-4c90-aa77-97b3d8ca2c9a",
businessId: "15c58e7d-18dd-49e3-ad86-0bf3f6e5013a",
businessName: "Royal NNJ p.l.c.",
},
},
{
beneficiaryPayId: "b1da8c12-cb0d-4b0e-8a30-75362dbf73b4",
parentBenePayId: "c946c383-6a64-476a-b903-3bc8baaa716c",
beneficiary: {
topId: "d56eebf3-b97b-429c-ae09-e488d85169cf",
businessId: "a52b0a2d-532b-4fd1-b667-c25691217e5e",
businessName: "Hammes Macejkovic and Steuber",
},
},
{
beneficiaryPayId: "f5f04b9b-5711-44d5-b06e-fb525d269310",
parentBenePayId: "c946c383-6a64-476a-b903-3bc8baaa716c",
beneficiary: {
topId: "96737c75-7a7f-4edc-a6b5-cb3149879a78",
businessId: "4e3b061d-5706-45b4-925d-cab675c95d98",
businessName: "Torphy-Osinski",
},
},
{
beneficiaryPayId: "2a027e32-ac76-48e4-9ab5-bec130211107",
parentBenePayId: "c946c383-6a64-476a-b903-3bc8baaa716c",
beneficiary: {
topId: "0f9c1849-2c1d-42ae-bdb1-40d83d912171",
businessId: "92ea79f3-ed3f-42e1-8f4c-9e1ccb3d746a",
businessName: "Schinner Inc",
},
},
{
beneficiaryPayId: "d0ec2133-fb2f-4cf2-8d2b-3d8d9eed7d09",
parentBenePayId: "f5f04b9b-5711-44d5-b06e-fb525d269310",
beneficiary: {
topId: "54c30c9f-a792-4659-adfc-b4287994cf1e",
businessId: "e6b95c56-ca17-40a4-b5f7-3a0c9fa9b327",
businessName: "Ferry-Donnelly",
},
},
{
beneficiaryPayId: "e0b87efe-1bd3-4584-b102-2210ab2bd8a7",
parentBenePayId: "2a027e32-ac76-48e4-9ab5-bec130211107",
beneficiary: {
topId: "b934b36a-0ab5-4869-9220-3bfd90bfb956",
businessId: "c47836bb-87e2-482b-bbf0-d42073c372c6",
businessName: "Lueilwitz-Johns",
},
},
{
beneficiaryPayId: "f58d63f6-e823-493a-acf4-226a9c4d21a1",
parentBenePayId: "f5f04b9b-5711-44d5-b06e-fb525d269310",
beneficiary: {
topId: "4e86ab2e-3a2a-4914-a0b3-153439c4013b",
businessId: "aead7de0-f2f3-46ce-a013-f83833b9ec0a",
businessName: "Ward-Collier",
},
},
{
beneficiaryPayId: "17263490-9b2b-4b87-a638-cbdaf0cd9daa",
parentBenePayId: "f5f04b9b-5711-44d5-b06e-fb525d269310",
beneficiary: {
topId: "751b8076-d7ca-4cca-922b-aabcc4b39845",
businessId: "6ae1d6e1-9a3b-482b-9c2a-861b3bea0cd4",
businessName: "Nikolaus Dickinson and Wiegand",
},
},
{
beneficiaryPayId: "71e36088-724f-4075-be14-5fdb37944447",
parentBenePayId: "b1da8c12-cb0d-4b0e-8a30-75362dbf73b4",
beneficiary: {
topId: "a6c67099-9937-4daa-829f-9b91adfea9a1",
businessId: "dbbb2e12-e50a-4905-93c1-29768b6ed74d",
businessName: "Rath Group",
},
},
{
beneficiaryPayId: "d50f34c9-9576-4511-9c49-4fe1fc296a57",
parentBenePayId: "b1da8c12-cb0d-4b0e-8a30-75362dbf73b4",
beneficiary: {
topId: "12e65313-943a-406a-9771-bd8485a35862",
businessId: "70d44d44-f7bf-4fd3-a475-378be757d86f",
businessName: "MacGyver Inc",
},
},
],
}
const payBeneficiaryLookupById = payBeneficiaries.reduce(
(acc, pb) => ({ ...acc, [pb.beneficiaryPayId]: pb }),
{}
)
const getOrgHierarchy = (payBeneficiary, acc) => {
if (!payBeneficiary.parentBenePayId) {
return [payBeneficiary.beneficiary.businessName, ...acc]
} else {
return getOrgHierarchy(
payBeneficiaryLookupById[payBeneficiary.parentBenePayId],
[payBeneficiary.beneficiary.businessName, ...acc]
)
}
}
const res = payBeneficiaries.map((pb) => ({
orgHierarchy: getOrgHierarchy(pb, []),
}))
console.log(res)

您可以使用Array.mapArray.find来获得所需的输出。

var input = {payBeneficiaries:[{beneficiaryPayId:'c946c383-6a64-476a-b903-3bc8baaa716c',parentBenePayId:'',beneficiary:{topId:'06d5e9eb-7110-4c90-aa77-97b3d8ca2c9a',businessId:'15c58e7d-18dd-49e3-ad86-0bf3f6e5013a',businessName:'Royal NNJ p.l.c.',},},{beneficiaryPayId:'b1da8c12-cb0d-4b0e-8a30-75362dbf73b4',parentBenePayId:'c946c383-6a64-476a-b903-3bc8baaa716c',beneficiary:{topId:'d56eebf3-b97b-429c-ae09-e488d85169cf',businessId:'a52b0a2d-532b-4fd1-b667-c25691217e5e',businessName:'Hammes Macejkovic and Steuber',},},{beneficiaryPayId:'f5f04b9b-5711-44d5-b06e-fb525d269310',parentBenePayId:'c946c383-6a64-476a-b903-3bc8baaa716c',beneficiary:{topId:'96737c75-7a7f-4edc-a6b5-cb3149879a78',businessId:'4e3b061d-5706-45b4-925d-cab675c95d98',businessName:'Torphy-Osinski',},},{beneficiaryPayId:'2a027e32-ac76-48e4-9ab5-bec130211107',parentBenePayId:'c946c383-6a64-476a-b903-3bc8baaa716c',beneficiary:{topId:'0f9c1849-2c1d-42ae-bdb1-40d83d912171',businessId:'92ea79f3-ed3f-42e1-8f4c-9e1ccb3d746a',businessName:'Schinner Inc',},},{beneficiaryPayId:'d0ec2133-fb2f-4cf2-8d2b-3d8d9eed7d09',parentBenePayId:'f5f04b9b-5711-44d5-b06e-fb525d269310',beneficiary:{topId:'54c30c9f-a792-4659-adfc-b4287994cf1e',businessId:'e6b95c56-ca17-40a4-b5f7-3a0c9fa9b327',businessName:'Ferry-Donnelly',},},{beneficiaryPayId:'e0b87efe-1bd3-4584-b102-2210ab2bd8a7',parentBenePayId:'2a027e32-ac76-48e4-9ab5-bec130211107',beneficiary:{topId:'b934b36a-0ab5-4869-9220-3bfd90bfb956',businessId:'c47836bb-87e2-482b-bbf0-d42073c372c6',businessName:'Lueilwitz-Johns',},},{beneficiaryPayId:'f58d63f6-e823-493a-acf4-226a9c4d21a1',parentBenePayId:'f5f04b9b-5711-44d5-b06e-fb525d269310',beneficiary:{topId:'4e86ab2e-3a2a-4914-a0b3-153439c4013b',businessId:'aead7de0-f2f3-46ce-a013-f83833b9ec0a',businessName:'Ward-Collier',},},{beneficiaryPayId:'17263490-9b2b-4b87-a638-cbdaf0cd9daa',parentBenePayId:'f5f04b9b-5711-44d5-b06e-fb525d269310',beneficiary:{topId:'751b8076-d7ca-4cca-922b-aabcc4b39845',businessId:'6ae1d6e1-9a3b-482b-9c2a-861b3bea0cd4',businessName:'Nikolaus Dickinson and Wiegand',},},{beneficiaryPayId:'71e36088-724f-4075-be14-5fdb37944447',parentBenePayId:'b1da8c12-cb0d-4b0e-8a30-75362dbf73b4',beneficiary:{topId:'a6c67099-9937-4daa-829f-9b91adfea9a1',businessId:'dbbb2e12-e50a-4905-93c1-29768b6ed74d',businessName:'Rath Group',},},{beneficiaryPayId:'d50f34c9-9576-4511-9c49-4fe1fc296a57',parentBenePayId:'b1da8c12-cb0d-4b0e-8a30-75362dbf73b4',beneficiary:{topId:'12e65313-943a-406a-9771-bd8485a35862',businessId:'70d44d44-f7bf-4fd3-a475-378be757d86f',businessName:'MacGyver Inc',},},],};
const getParent = (data, parentBenePayId) => {
return data.payBeneficiaries.find(
pBen => pBen.beneficiaryPayId === parentBenePayId
);
};
let res = input.payBeneficiaries.map(ben => {
let parent = getParent(input, ben.parentBenePayId);
let output = {
orgHierarchy: [ben.beneficiary.businessName],
};
if (parent) {
output.orgHierarchy.splice(0, 0, parent.beneficiary.businessName);
if (parent.parentBenePayId) {
let grandParent = getParent(input, parent.parentBenePayId);
if (grandParent) {
output.orgHierarchy.splice(0, 0, grandParent.beneficiary.businessName);
}
}
}
return output;
});
console.log(res);
.as-console-wrapper{
max-height: 100% !important;
}

这适用于您的示例,即考虑3个级别。但是这个例子可以调整和扩展到多个层次的继承制。

最新更新