#javascript
#javascript
Вопрос:
Я хочу преобразовать данные из массива ‘data2’ в массив ‘dataConvert’, и я хочу найти другой способ оптимизации.
let dataConvert = [];
data2 = [
{
time: "2020-7",
tasks: [
{
key: "p1",
value: 15
},
{
key: "p2",
value: 13
},
]
},
{
time: "2020-8",
tasks: [
{
key: "p1",
value: 16
},
{
key: "p2",
value: 19
},
]
},
{
time: "2020-9",
tasks: [
{
key: "p1",
value: 12
},
{
key: "p2",
value: 93
},
]
}
]
После добавления данных в массив ‘dataConvert’, затем ‘dataConvert’ форматируется следующим образом:
dataConvert = [
["x","2020-7", "2020-8", "2020-9"],
["p1", 15, 16, 12],
["p2", 13, 19, 93]
]
я пробовал использовать reduce
, я хочу найти другой способ оптимизации.
let dateConvert = [], valueConvert = [];
data2.forEach(x=>{
let date = new Date(x.time);
if (date) {
let getYear = date.getFullYear();
let getMonth = date.getMonth() 1;
let newDate = `${getYear}-${getMonth}-1`;
return dateConvert = [...dateConvert, newDate];
}
})
dateConvert.unshift("x");
// get p1 p2 value
let allTasks = data2.flatMap(x => x.tasks);
valueConvert = Object.values(allTasks.reduce((arr, item) => {
arr[item.key] = arr[item.key] || [item.key];
arr[item.key].push(item.value);
return arr;
}, {}));
dataConvert = [...[dateConvert], ...valueConvert];
спасибо тебе.
Комментарии:
1. Разве вы не задавали тот же вопрос несколько часов назад?
2. @Barmar Вопрос был закрыт, и никто не ответил
3. Я проголосовал за повторное открытие его, когда вы добавили свой код. Вы должны быть более терпеливыми.
4. Если код работает и вы ищете совет по его улучшению, то Code Review — подходящее место. Но смотрите codereview.meta.stackexchange.com/questions/5777 /… сначала.
Ответ №1:
Вы могли бы использовать вложенные циклы и сохранять индекс в объекте для более быстрого доступа к key
.
const
data = [{ time: "2020-7", tasks: [{ key: "p1", value: 15 }, { key: "p2", value: 13 }] }, { time: "2020-8", tasks: [{ key: "p1", value: 16 }, { key: "p2", value: 19 }] }, { time: "2020-9", tasks: [{ key: "p1", value: 12 }, { key: "p2",value: 93 }] }],
dataConvert = [['x']],
indices = {};
data.forEach(o => {
dataConvert[0].push(o.time);
o.tasks.forEach(({ key, value }) => {
if (!(key in indices)) indices[key] = dataConvert.push([key]) - 1;
dataConvert[indices[key]].push(value);
});
});
console.log(dataConvert);
.as-console-wrapper { max-height: 100% !important; top: 0; }