I've spent a couple hours to find a way to handling this array of objects:
[
{
"value": "foo01",
"Diagnosis_Code": "Tidak ada",
"name": "bar"
},
{
"value": "foo02",
"Diagnosis_Code": "Tidak ada",
"name": "bar"
},
{
"value": "foo03",
"Diagnosis_Code": "Tidak ada",
"name": "bar"
},
{
"value": "foo04",
"Diagnosis_Code": "Tidak ada",
"name": "bar"
},
{
"value": "val1",
"Diagnosis_Code": "foo03",
"name": "bar2"
},
{
"value": "val2",
"Diagnosis_Code": "foo01",
"name": "bar2"
},
{
"value": "val3",
"Diagnosis_Code": "foo02",
"name": "bar2"
},
{
"value": "val3",
"Diagnosis_Code": "foo04",
"name": "bar2"
},
{
"value": "val1",
"Diagnosis_Code": "foo01",
"name": "bar3"
},
{
"value": "val2",
"Diagnosis_Code": "foo03",
"name": "bar3"
},
{
"value": "val2",
"Diagnosis_Code": "foo04",
"name": "bar3"
},
{
"value": "val3",
"Diagnosis_Code": "foo02",
"name": "bar3"
},
{
"value": "val1",
"Diagnosis_Code": "foo01",
"name": "bar4"
},
{
"value": "val1",
"Diagnosis_Code": "foo02",
"name": "bar4"
},
{
"value": "val1",
"Diagnosis_Code": "foo04",
"name": "bar4"
},
{
"value": "val2",
"Diagnosis_Code": "foo03",
"name": "bar4"
}
]
My Expected JSON is something like this:
[
{
"name":"bar",
"value":[
{
"value": "foo01",
"Diagnosis_Code": ["Tidak ada"],
"name": "bar",
},
{
"value": "foo02",
"Diagnosis_Code": ["Tidak ada"],
"name": "bar",
},
{
"value": "foo03",
"Diagnosis_Code": ["Tidak ada"],
"name": "bar",
},
{
"value": "foo04",
"Diagnosis_Code": ["Tidak ada"],
"name": "bar",
}
]
},
{
"name": "bar2",
"value": [
{
"value": "val1",
"Diagnosis_Code": ["foo03"],
"name": "bar2",
},
{
"value": "val2",
"Diagnosis_Code": ["foo01"],
"name": "bar2",
},
{
"value": "val3",
"Diagnosis_Code": ["foo02", "foo04"],
"name": "bar2",
}
]
},
{
"name": "bar3",
"value":[
{
"value": "val1",
"Diagnosis_Code": ["foo01"],
"name": "bar3",
},
{
"value": "val2",
"Diagnosis_Code": ["foo03", "foo04"],
"name": "bar3",
},
{
"value": "val3",
"Diagnosis_Code": ["foo02"],
"name": "bar3",
},
]
},
{
"name": "bar4",
"value": [
{
"value": "val1",
"Diagnosis_Code": ["foo01", "foo02", "foo04"],
"name": "bar4",
},
{
"value": "val2",
"Diagnosis_Code": ["foo03"],
"name": "bar4",
},
]
},
]
I want to put duplicate name value into Object and if the Diagnosis_Code of json is same as another value, put it into an array
The code I've use for now is just to using reduce to handle the name, but I don't know how to handle the Diagnosis_Code property:
var orgArray = [{"value":"foo01","Diagnosis_Code":"Tidak ada","name":"bar"},{"value":"foo02","Diagnosis_Code":"Tidak ada","name":"bar"},{"value":"foo03","Diagnosis_Code":"Tidak ada","name":"bar"},{"value":"foo04","Diagnosis_Code":"Tidak ada","name":"bar"},{"value":"val1","Diagnosis_Code":"foo03","name":"bar2"},{"value":"val2","Diagnosis_Code":"foo01","name":"bar2"},{"value":"val3","Diagnosis_Code":"foo02","name":"bar2"},{"value":"val3","Diagnosis_Code":"foo04","name":"bar2"},{"value":"val1","Diagnosis_Code":"foo01","name":"bar3"},{"value":"val2","Diagnosis_Code":"foo03","name":"bar3"},{"value":"val2","Diagnosis_Code":"foo04","name":"bar3"},{"value":"val3","Diagnosis_Code":"foo02","name":"bar3"},{"value":"val1","Diagnosis_Code":"foo01","name":"bar4"},{"value":"val1","Diagnosis_Code":"foo02","name":"bar4"},{"value":"val1","Diagnosis_Code":"foo04","name":"bar4"},{"value":"val2","Diagnosis_Code":"foo03","name":"bar4"}];
var newArray = orgArray.reduce(function(acc, curr) {
var findIfNameExist = acc.findIndex(function(item) {
return item.name === curr.name;
})
if (findIfNameExist === -1) {
let obj = {
'name': curr.name,
"value": [curr]
}
acc.push(obj)
} else {
acc[findIfNameExist].value.push(curr)
}
return acc;
}, []);
console.log(newArray)
Is there a way of handling transforming the duplicate Diagnosis_Codes into an array?