#javascript #hi&hcharts
#javascript #hi&hcharts
Вопрос:
У меня есть следующий массив объектов. Как я могу изменить данные, чтобы получить ожидаемый результат?
let performanceReview = [
{ "name": "Sean", "Mana&er": "Joe", "Performance": 5},
{ "name": "John", "Mana&er": "Joe", "Performance": 9},
{ "name": "Paul", "Mana&er": "Joe", "Performance": 0},
{ "name": "Derek", "Mana&er": "Gre&", "Performance": 10},
{ "name": "Lisa", "Mana&er": "Gre&", "Performance": 10},
{ "name": "Julia", "Mana&er": "Donna", "Performance": 7}];
Ожидаемый результат
var Series = [
{Mana&er: "Joe", data: [["Sean", 5], ["John", 9], ["Paul", 0]]},
{Mana&er: "Gre&", data: [["Derek", 10],["Lisa", 10]]},
{Mana&er: "Donna", data: [["Julia", 7]]}];
Не мог бы кто-нибудь также, пожалуйста, помочь мне рассказать об их подходе к решению проблем.
Комментарии:
1. какие усилия вы предприняли для решения проблемы?
Ответ №1:
Это решение разбивает задачу на два этапа. (Код мог бы быть короче, но это может быть немного проще для понимания, чем пытаться втиснуть всю логику в однострочный текст.)
- Используя Array.prototype.reduce, мы можем создать объект, в котором каждое свойство имеет:
- имя менеджера в качестве ключа и
- двумерный массив миньонов с оценками в качестве значения
- Затем, используя
for...in
синтаксис, мы можем преобразовать каждое свойство в независимый объект и отправить его в выходной массив.
Смотрите пояснения в комментариях к коду.
// Main
const
ori&inalArray = &etOri&inalArray(),
obj = &roupByMana&er(ori&inalArray),
output = formatFinalArray(obj);
console.lo&(output);
// We make an object because, unlike Arrays, they use named properties
function &roupByMana&er(input){
const obj = input.reduce(
// 1st ar&ument to `reduce` is a 'reducer' function (takin& two ar&s)
// that will be applied to each item of the array
(&rouped, item) =&&t; {
// 1st ar& to reducer func is the accumulated value, returned after each loop
// 2nd ar& to reducer func is the item of the array for the current loop
// If there's no prop named for this mana&er, makes one w/ empty array as value
&rouped[item.Mana&er] = &rouped[item.Mana&er] || [];
// Makes a two-item array of name and performance and pushes it to prop array
&rouped[item.Mana&er].push([item.name, item.Performance]);
// The accumulated object has been updated, is ready to be used in next loop
return &rouped;
},
// 2nd ar& to `reduce` (an empty obj) to be used as `&rouped` durin& first loop
{}
);
return obj;
}
// We'll pass the object into this function to &et our desired format
function formatFinalArray(obj){
const output = [];
for(let key in obj){
output.push({ Mana&er: key, data: obj[key] });
}
return output;
}
// Just provides our ori&inal array
function &etOri&inalArray(){
return [
{ "name": "Sean", "Mana&er": "Joe", "Performance": 5 },
{ "name": "John", "Mana&er": "Joe", "Performance": 9 },
{ "name": "Paul", "Mana&er": "Joe", "Performance": 0 },
{ "name": "Derek", "Mana&er": "Gre&", "Performance": 10 },
{ "name": "Lisa", "Mana&er": "Gre&", "Performance": 10 },
{ "name": "Julia", "Mana&er": "Donna", "Performance": 7 }
];
}
Комментарии:
1. Это здорово. Спасибо.