简体   繁体   中英

Having trouble displaying the outdoor variable

The loop is suppose to give me stored the array in the object Map and show me outdoor as the most profitable department.

I want to run a loop iterating through the array, I am just having trouble accessing that data again in the map and getting the most profitable value highest(sales) by the department.

Eg Combine all outdoors sales, hardware and carpentry to give u the total and console.log the the "outdoor" which is the highest.

  var salesData = [{ department: 'hardware', sales: 4500, day: 'Monday' }, { department: 'outdoor', sales: 1500, day: 'Monday' }, { department: 'carpentry', sales: 5500, day: 'Monday' }, { department: 'hardware', sales: 7500, day: 'Tuesday' }, { department: 'outdoor', sales: 2505, day: 'Tuesday' }, { department: 'carpentry', sales: 1540, day: 'Tuesday' }, { department: 'hardware', sales: 1500, day: 'Wednesday' }, { department: 'outdoor', sales: 8507, day: 'Wednesday' }, { department: 'carpentry', sales: 8009, day: 'Wednesday' }, { department: 'hardware', sales: 12000, day: 'Thursday' }, { department: 'outdoor', sales: 18007, day: 'Thursday' }, { department: 'carpentry', sales: 6109, day: 'Thursday' }, { department: 'hardware', sales: 7005, day: 'Friday' }, { department: 'outdoor', sales: 12006, day: 'Friday' }, { department: 'carpentry', sales: 16109, day: 'Friday' }]; var departmentMap = {}; var high = ""; function mostProfitableDepartment(salesList) { for (var i = 0; i < salesList.length; i++) { var currentDep = salesList[i]; if (departmentMap[currentDep] === undefined) { departmentMap[currentDep] = 0; } departmentMap[currentDep] = departmentMap[currentDep] + 1 } console.log(departmentMap); } mostProfitableDepartment(salesData); for (var depHigh in departmentMap) { if (departmentMap[depHigh] > high) { high = departmentMap[depHigh] } } console.log(high); 

 var salesData = [ {department : 'hardware', sales : 4500, day : 'Monday'}, {department : 'outdoor', sales : 1500, day : 'Monday'}, {department : 'carpentry', sales : 5500, day : 'Monday'}, {department : 'hardware', sales : 7500, day : 'Tuesday'}, {department : 'outdoor', sales : 2505, day : 'Tuesday'}, {department : 'carpentry', sales : 1540, day : 'Tuesday'}, {department : 'hardware', sales : 1500, day : 'Wednesday'}, {department : 'outdoor', sales : 8507, day : 'Wednesday'}, {department : 'carpentry', sales : 8009, day : 'Wednesday'}, {department : 'hardware', sales : 12000, day : 'Thursday'}, {department : 'outdoor', sales : 18007, day : 'Thursday'}, {department : 'carpentry', sales : 6109, day : 'Thursday'}, {department : 'hardware', sales : 7005, day : 'Friday'}, {department : 'outdoor', sales : 12006, day : 'Friday'}, {department : 'carpentry', sales : 16109, day : 'Friday'}, ]; // Build a obj map and sum up the sales of each department var sales = salesData.reduce((obj, a) => { obj[a.department] = (obj[a.department] || 0) + a.sales return obj }, {}) // Figure out which department is the highest var high = Object.keys(sales).reduce((a, b) => sales[a] > sales[b] ? a : b ) console.log(sales) console.log(high, sales[high]) 

You can use a combination of .reduce calls as below.

 var salesData = [{ department: 'hardware', sales: 4500, day: 'Monday' }, { department: 'outdoor', sales: 1500, day: 'Monday' }, { department: 'carpentry', sales: 5500, day: 'Monday' }, { department: 'hardware', sales: 7500, day: 'Tuesday' }, { department: 'outdoor', sales: 2505, day: 'Tuesday' }, { department: 'carpentry', sales: 1540, day: 'Tuesday' }, { department: 'hardware', sales: 1500, day: 'Wednesday' }, { department: 'outdoor', sales: 8507, day: 'Wednesday' }, { department: 'carpentry', sales: 8009, day: 'Wednesday' }, { department: 'hardware', sales: 12000, day: 'Thursday' }, { department: 'outdoor', sales: 18007, day: 'Thursday' }, { department: 'carpentry', sales: 6109, day: 'Thursday' }, { department: 'hardware', sales: 7005, day: 'Friday' }, { department: 'outdoor', sales: 12006, day: 'Friday' }, { department: 'carpentry', sales: 16109, day: 'Friday' }]; var aggregated = salesData.reduce(function(p,c){ if(p[c.department] == undefined) p[c.department] = 0; p[c.department]+= c.sales; return p; },{}); console.log("total sales",aggregated); var highest = Object.keys(aggregated).reduce(function(p,c){ if(aggregated[c]>p.value) return {key:c,value:aggregated[c]} return p; },{key:'notset',value:0}); console.log("best department", highest); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM