[英]Create nested array of objects from array of objects Javascript
I have the following array of objects.我有以下对象数组。 How can I reshape the data to get the Expected Output?
如何重塑数据以获得预期的 Output?
let performanceReview = [
{ "name": "Sean", "Manager": "Joe", "Performance": 5},
{ "name": "John", "Manager": "Joe", "Performance": 9},
{ "name": "Paul", "Manager": "Joe", "Performance": 0},
{ "name": "Derek", "Manager": "Greg", "Performance": 10},
{ "name": "Lisa", "Manager": "Greg", "Performance": 10},
{ "name": "Julia", "Manager": "Donna", "Performance": 7}];
Expected Output预计 Output
var Series = [
{Manager: "Joe", data: [["Sean", 5], ["John", 9], ["Paul", 0]]},
{Manager: "Greg", data: [["Derek", 10],["Lisa", 10]]},
{Manager: "Donna", data: [["Julia", 7]]}];
Could someone also please help walk me through their problem solving approach.有人也可以帮助我了解他们解决问题的方法。
This solution breaks the task into two steps .此解决方案将任务分为两个步骤。 (The code could be shorter, but this may be a bit easier to understand than trying to squeeze all the logic into a one-liner.)
(代码可能更短,但这可能比试图将所有逻辑压缩到一个单行中更容易理解。)
for...in
syntax, we can convert each property to an independent object and push it to the output array.for...in
语法,我们可以将每个属性转换为独立的 object 并将其推送到 output 数组中。 See the in-code comments for clarifications.有关说明,请参阅代码内注释。
// Main const originalArray = getOriginalArray(), obj = groupByManager(originalArray), output = formatFinalArray(obj); console.log(output); // We make an object because, unlike Arrays, they use named properties function groupByManager(input){ const obj = input.reduce( // 1st argument to `reduce` is a 'reducer' function (taking two args) // that will be applied to each item of the array (grouped, item) => { // 1st arg to reducer func is the accumulated value, returned after each loop // 2nd arg to reducer func is the item of the array for the current loop // If there's no prop named for this manager, makes one w/ empty array as value grouped[item.Manager] = grouped[item.Manager] || []; // Makes a two-item array of name and performance and pushes it to prop array grouped[item.Manager].push([item.name, item.Performance]); // The accumulated object has been updated, is ready to be used in next loop return grouped; }, // 2nd arg to `reduce` (an empty obj) to be used as `grouped` during first loop {} ); return obj; } // We'll pass the object into this function to get our desired format function formatFinalArray(obj){ const output = []; for(let key in obj){ output.push({ Manager: key, data: obj[key] }); } return output; } // Just provides our original array function getOriginalArray(){ return [ { "name": "Sean", "Manager": "Joe", "Performance": 5 }, { "name": "John", "Manager": "Joe", "Performance": 9 }, { "name": "Paul", "Manager": "Joe", "Performance": 0 }, { "name": "Derek", "Manager": "Greg", "Performance": 10 }, { "name": "Lisa", "Manager": "Greg", "Performance": 10 }, { "name": "Julia", "Manager": "Donna", "Performance": 7 } ]; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.