12-09-2022 04:22 AM
Below is the Input
[
{
“@id”: “2”,
“col”: [
{
“@id”: “2”,
“@transable”: “yes”,
“$”: “Replace1”
},
{
“@id”: “3”,
“@transable”: “no”,
“$”: “Replace2”
}
],
“group”: [
{
“A”: “A1”,
“B”: “B1”,
“C”: “C1”,
“D”: “D1”,
“E”: "E1 ",
“F”: “F1”,
“G”: “G1”,
“H”: “”,
“I”: “”
},
{
“A”: “A2”,
“B”: “B2”,
“C”: “C2”,
“D”: “D2”,
“E”: “”,
“F”: “F2”,
“G”: “G2”,
“H”: “”,
“I”: “”
}
]
}
]
expected Output :
[
{
"group": [
{
"A": "A1",
"B": "B1",
"C": "C1",
"D": "D1",
"E": "E1 ",
"F": "F1",
"G": "G1",
"H": "",
"I": ""
},
{
"A": "A2",
"B": "Replace1",
"C": "Replace2",
"D": "D2",
"E": "",
"F": "F2",
"G": "G2",
"H": "",
"I": ""
}
]
}
]
explanantion : @id refers to row number of the group and @id under col refers to the column number of the group where replacement needs to be done with the value of "$"
12-12-2022 06:16 PM
My bad, I got the charCode wrong it should be 64 😀
$group.map((g,i)=> $row.find((a,b,c)=> a[‘@id’] == i + 1) instanceof Object ? g.mapValues((val,key)=> $row.find((a,b,c)=> a[‘@id’] == i + 1)[‘col’].find((x,y,z)=> x[‘@id’] == (key.charCodeAt(0) - 64)) instanceof Object ? $row.find((a,b,c)=> a[‘@id’] == i + 1)[‘col’].find((x,y,z)=> x[‘@id’] == (key.charCodeAt(0) - 64))[‘$’] : val ) : g )
12-12-2022 06:28 PM
hi @alchemiz the column keys in group array maynot be characters like A,B,C… its suppose to map based on the position like col1,col2 etc the expression suggested by @bojanvelevski
$group.map((x,index)=>$[‘@id’] == index + 1 ? (x.mapValues((v,k)=> $col.find(e => e[‘@id’]-1 == x.keys().indexOf(k)) != null ? $col.find(e => e[‘@id’]-1 == x.keys().indexOf(k) ).get(‘$’) : v)) : x)
works irrespective of column name in group array but its should be tweaked to satisfy my input becoz in which he had metioned $[‘@id’] comes in as filed but in my case it comes in as an array element like this jsonPath($, “row[][‘@id’]") and also $col comes in as an array but in my case it comes in under row array like this jsonPath($, "row[].col”), so i need help in adjusting the above expression to satisfy my input.Please could u help 😔
12-12-2022 06:42 PM
Just replace the criteria when checking for the col object…
$group.map((g,i)=> $row.find((a,b,c)=> a[‘@id’] == i + 1) instanceof Object ? g.mapValues((val,key)=> $row.find((a,b,c)=> a[‘@id’] == i + 1)[‘col’].find((x,y,z)=> x[‘@id’] == (g.keys().indexOf(key) + 1)) instanceof Object ? $row.find((a,b,c)=> a[‘@id’] == i + 1)[‘col’].find((x,y,z)=> x[‘@id’] == (g.keys().indexOf(key) + 1)).get(‘$’,val) : val ) : g )
12-12-2022 11:19 PM
@alchemiz thanks a lot!! its working 🙂
12-19-2022 07:25 PM
Glad to be of help 🤘