2016-11-10 52 views
0

该循环假设我将数组存储在对象Map中,并显示出户外是最有利可图的部门。在显示室外变量时遇到问题

我想运行一个遍历数组的循环,我只是无法在地图中再次访问这些数据,并且得到部门最高的利润(销售额)。

E.g结合所有的户外销售,硬件和木工给你的总和和console.log最高的“室外”。

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);

回答

1

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])

+0

不完全是,但我确实有做如上指示。我无法得到正确的。 @Endless – Duvall912

+0

Sry,误解了你的问题,更新了答案 – Endless

+0

我实际上并不了解代码,请你澄清一下,而不使用reduce函数。 @Endless – Duvall912

1

您可以使用如下.reduce电话的组合。

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);

+0

代码应该是像上面提到的那样构建,只是纠正了它不想去的地方。我不想复制你的代码,只需要澄清它就可以使用for in循环和对象映射来运行代码。 @Jamiec – Duvall912

+0

@ Duvall912你的代码结构严重不全(全局变量被函数修改,坏习惯)。花时间了解更好的方式来实现您的最终目标。 – Jamiec