I have some data that i need to format. The input is something like
const data = [
['0','some name','ok'],
['0.1','some name','ok'],
['0.1.01','some name', 'ok'],
['0.1.01.01','some name','ok'],
['0.1.01.02','some name','ok'],
['1','some name','ok'],
]
I need it to be like:
const data = [{
code: "0"
name: "some name"
status: "ok"
data:[{
code: "0.1"
name: "some name"
status: "ok"
data:[
{
code: "0.1.01"
name: "some name"
status: "ok"
data: []
},
{
code: "0.1.02"
name: "some name"
status: "ok"
data:[]
}
]
},
{
code: "1"
name: "some name"
status: "ok"
data[]
}
]
}]
i'm going to use this data to poppulate an expandable react table, i need that kind of structure so useExpanded can handle expandable rows like this
code | decription | status
__________________________________
- 0 | some text | ok
- 0.1 | some text | ok
+ 0.1.01 | some text | ok
+ 0.1.02 | some text | ok
+ 1 | some text | ok
so the 'code' represents the level, each level is an array of objects
This is what i tried so far.
const formatData = () => {
const data = [
['0','some name','ok'],
['0.1','some name','ok'],
['0.1.01','some name', 'ok'],
['0.1.01.01','some name','ok'],
['0.1.01.02','some name','ok'],
]
const columnName = ['code','name','status']
const result = [];
data.forEach((item) => {
let rowInfo = {};
item.forEach((item, index) => {
rowInfo = { ...rowInfo, [columnName[index]]: item };
});
if (item[0].split(".").length === 1) { // If is the first level
result.push({ ...rowInfo, subRows: [] });
} else {
let aux = item[0].split(".");
aux.slice(0, -1).reduce((r, e) => { // find parent and push object to array
r[e].subRows.push({ ...rowInfo, subRows: [] });
}, result);
}
});
return result;
}
I can get the first 3 rows, but the program breaks when trying to find sublevel array