리팩토링 :Lodash 코드 최적화 /이 원래 JSON 데이터입니다
var data= [
{ project: "ABC", area: 'Test', subArea: 'Dev', done: 10 },
{ project: "ABC", area: 'Test', subArea: 'QA', done: 10 },
{ project: "ABC", area: 'Test', subArea: 'Support', done: 10 },
{ project: "ABC", area: 'External', subArea: 'Dev', done: 5 },
{ project: "ABC", area: 'External', subArea: 'QA', done: 5 },
{ project: "ABC", area: 'External', subArea: 'Support', done: 5 },
{ project: "ABC", area: 'Escalation', subArea: 'Dev', done: 20 },
{ project: "ABC", area: 'Escalation', subArea: 'QA', done: 20 },
{ project: "ABC", area: 'Escalation', subArea: 'Support', done: 20 },
{ project: "ABC123", area: 'Test', subArea: 'Dev', done: 20 },
{ project: "ABC123", area: 'Test', subArea: 'QA', done: 20 },
{ project: "ABC123", area: 'Test', subArea: 'Support', done: 20 },
{ project: "ABC123", area: 'External', subArea: 'Dev', done: 10 },
{ project: "ABC123", area: 'External', subArea: 'QA', done: 10 },
{ project: "ABC123", area: 'External', subArea: 'Support', done: 10 },
{ project: "ABC123", area: 'Escalation', subArea: 'Dev', done: 5 },
{ project: "ABC123", area: 'Escalation', subArea: 'QA', done: 5 },
{ project: "ABC123", area: 'Escalation', subArea: 'Support', done: 5 },
];
내가 필요로하는 지역에서 그들을 분할하고 각 의 수행시간을 요약, 프로젝트으로 항목을 그룹화하는 것입니다 하위 영역. 내 실제 코드 울부 짖는 소리와
[
{
"name": "ABC",
"test": {
"total": 30,
"totalDev": 10,
"totalQA": 10,
"totalSup": 10
},
"external": {
"total": 15,
"totalDev": 5,
"totalQA": 5,
"totalSup": 5
},
"escalation": {
"total": 60,
"totalDev": 20,
"totalQA": 20,
"totalSup": 20
}
},
{
"name": "ABC123",
"test": {
"total": 60,
"totalDev": 20,
"totalQA": 20,
"totalSup": 20
},
"external": {
"total": 30,
"totalDev": 10,
"totalQA": 10,
"totalSup": 10
},
"escalation": {
"total": 15,
"totalDev": 5,
"totalQA": 5,
"totalSup": 5
}
}
]
나는 이미 내가 원하는 결과를 받고 있어요,하지만 난 코드를 더 최적화 할 수 있다고 생각 : 새로운 JSON 결과는 다음과 같이해야합니다. 반복없이, 모든 조건부 검증은 하드 코드없이 영역 및 하위 영역 특성을 맵 블록 내에 포함합니다. 이러한 값은 서버 측 영역에서 동적이기 때문입니다.
var sum = (total, item) => total += item.done;
result = _.chain(data)
.groupBy(function(value) { return value.project })
.map((projectGroup, projectName) => ({
name: projectName,
test: {
total: _.reduce(_.filter(projectGroup, (o) => (o.area === 'Test')) , sum, 0),
totalDev: _.reduce(_.filter(projectGroup, (o) => (o.area === 'Test' && o.subArea === 'Dev')) , sum, 0),
totalQA: _.reduce(_.filter(projectGroup, (o) => (o.area === 'Test' && o.subArea === 'QA')) , sum, 0),
totalSup: _.reduce(_.filter(projectGroup, (o) => (o.area === 'Test' && o.subArea === 'Support')) , sum, 0)
},
external: {
total: _.reduce(_.filter(projectGroup, (o) => (o.area === 'External')) , sum, 0),
totalDev: _.reduce(_.filter(projectGroup, (o) => (o.area === 'External' && o.subArea === 'Dev')) , sum, 0),
totalQA: _.reduce(_.filter(projectGroup, (o) => (o.area === 'External' && o.subArea === 'QA')) , sum, 0),
totalSup: _.reduce(_.filter(projectGroup, (o) => (o.area === 'External' && o.subArea === 'Support')) , sum, 0)
},
escalation: {
total: _.reduce(_.filter(projectGroup, (o) => (o.area === 'Escalation')) , sum, 0),
totalDev: _.reduce(_.filter(projectGroup, (o) => (o.area === 'Escalation' && o.subArea === 'Dev')) , sum, 0),
totalQA: _.reduce(_.filter(projectGroup, (o) => (o.area === 'Escalation' && o.subArea === 'QA')) , sum, 0),
totalSup: _.reduce(_.filter(projectGroup, (o) => (o.area === 'Escalation' && o.subArea === 'Support')) , sum, 0)
}
}))
'.groupBy (기능 (값) {반환 value.project})'단순히'.groupBy ('프로젝트')가 될 수' –
이유 ABC 테스트 totaldev = 30? 그 번호는 어디에서 왔는가? –
이제 수정했습니다. – sandrojack