cancel
Showing results for 
Search instead for 
Did you mean: 

Replace value according to its poition

KTsnap
New Contributor III

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 "$"
14 REPLIES 14

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 )

image

rashmi
New Contributor III

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 😔

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 )

image

rashmi
New Contributor III

@alchemiz thanks a lot!! its working 🙂

Glad to be of help 🤘