I would like to create an array of object from another array of object to plot a graph.
This is the array I use to place the position of object inside the expected object.
let uniqueSkills = ['Using', 'Analyzing', 'Summarizing', 'Inferring', 'Predicting', 'Activating']
This is the object I have which needs to be modified.
let data = {
data0:[
{count: 1, length: 1, skill: "Activating"},
{count: 4, length: 1, skill: "Using"},
{count: 2, length: 1, skill: "Analyzing"}
],
data1: [
{count: 2, length: 1, skill: "Summarizing"}
],
data2: [
{count: 1, length: 1, skill: "Predicting"},
{count: 4, length: 1, skill: "Analyzing"}
]
}
The final result object should look like this.
data = {
data0:[
{count: 4, length: 1, skill: "Using"},
{count: 2, length: 1, skill: "Analyzing"},
{skill: "Summarizing"},
{skill: "Inferring"},
{skill: "Predicting"},
{count: 4, length: 1, skill: "Activating"}
],
data1: [
{skill: "Using"},
{skill: "Analyzing"},
{count: 2, length: 1, skill: "Summarizing"},
{skill: "Inferring"},
{skill: "Predicting"},
{skill: "Activating"}
],
data2: [
{skill: "Using"},
{count: 4, length: 1, skill: "Analyzing"},
{skill: "Summarizing"},
{skill: "Inferring"},
{count: 1, length: 1, skill: "Predicting"},
{skill: "Activating"}
]
}
The algorithm that I wrote works fine in some cases but breaks in some. Here it is,
Object.keys(data).forEach(key => {
for (let i = 0; i < uniqueSkills.length; i++) {
if (typeof data[key][i] == 'object') {
if (data[key][i].skill !== uniqueSkills[i]) {
let index = uniqueSkills.indexOf(data[key][i].skill)
if (typeof data[key][index] == 'object') {
let anotherIndex = uniqueSkills.indexOf(data[key][index].skill)
let elementAtIndex = data[key][index]
let elementAtAnotherIndex = data[key][anotherIndex]
data[key][i] = elementAtIndex
data[key][index] = elementAtAnotherIndex
}
else {
data[key][index] = data[key][i]
data[key][i] = {skill: uniqueSkills[i]}
}
}
} else {
data[key][i] = {skill: uniqueSkills[i]}
}
}
})