我想要从另一个对象数组创建对象数组以绘制图表。
这是我用来放置对象位置的预期对象的数组。
let uniqueSkills = ['Using', 'Analyzing', 'Summarizing', 'Inferring', 'Predicting', 'Activating']
这就是需要修改的对象。
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"}
]
}
最终的结果对象应该像这样。
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"}
]
}
我写的算法在某些情况下能够正常工作,但在其他情况下会出现问题。以下是代码片段:
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]}
}
}
})