我在对象数组上执行一系列操作(最初使用下划线),这些对象找到销售额最高的月份的销售值。
数据:values
数组表示给定月份的总销售额。 x
=日期,y
=销售。
[
{
name:'banana',
values:[
{
x: //date object: jan 2016,
y: 3423
},
{
x: //date object: feb 2016,
y: 53453
},
{
x: //date object: mar 2016,
y: 65457
},
{
x: //date object: apr 2016,
y: 456345
},
...//12 months
]
},
{
name:'apple',
values:[
{
x: //date object: jan 2016,
y: 34876
},
{
x: //date object: feb 2016,
y: 89
},
{
x: //date object: mar 2016,
y: 7896
},
{
x: //date object: apr 2016,
y: 6547
},
...//12 months
]
},
... more objects
]
我的功能:返回所有月份中的最高销售额。
getMaxMonthlySales:function(data){
var salesArrays = _.map(data,obj=>_.map(obj.values,'y'))
var maxSales = _.zip.apply(null,salesArrays)
maxSales = _.reduce(maxSales,(max,arr)=>{
var sum = _.reduce(arr,(memo,val)=>memo+val);
return Math.max(max,sum);
},0)
return maxSales;
}
每个对象的所有values
数组都保证长度相同并且具有相同的日期顺序。我的一般策略是执行嵌套映射以获取仅销售的数组数组。然后将数组压缩到按月分组销售。然后最后减少每个月找到每月的总销售额,然后找到最大月份。
我的问题是我如何才能将此功能重写为理想的lodash链?
答案 0 :(得分:1)
作为oneliner:
<?php
$q=mysqli_query($conn,"select * from notice where user='".$_SESSION['user']."'");
$rr=mysqli_num_rows($q);
if(!$rr)
{
echo "<h2 style='color:red'>No any notice for You !!!</h2>";
}
else
{
echo "<h2 style='color:green'>Total Notice for you: $rr</h2>";
}
?>
或者
getMaxMonthlySales: function(data) {
return _.max(_.map(_.groupBy(_.flatten(_.map(data, 'values')), 'x'),
o => _.sumBy(o, 'y')));
}