# #每日一题 数据处理


```
      let arr = [
        { price: 400, rules: [1000, 100], count: 3 },
        { price: 210, rules: [1000, 100], count: 4 },
        { price: 130, rules: [199, 30], count: 9 },
        { price: 130, rules: [], count: 9 },
        { price: 500, rules: [100, 10], count: 5 },
        { price: 199.1, rules: [200, 30], count: 12 },
        { price: 699, rules: [199, 30], count: 6 },
        { price: 18, rules: [], count: 2 },
        { price: 999, rules: [1000, 100], count: 7 }
      ];
      /**
      满减规则 ：
      price: 当前商品价格
      rules：满减规则 [1000,10] ==> 满 1000 - 10 ; rules数组为空则没有满减
      count：商品数量
      相同规则的 rules[0] （例如：1000） 商品价格（price）乘以数量（count） 进行累加 之后符合满减规则即可减少一定钱数
      如果（price*count）=> 400*3=1200 符合>1000 即 减100 结果是 1200-100 =1100
      如果 (price*count）=> 400*5=2000 符合>1000 即 减100*2 结果是 2000-100*2 =1800

      那么 根据此规则 算出此数组一共满减多少钱？
      */
``` 
**提醒：
[{ price: 400, rules: [1000, 100], count: 4 },{ price: 400, rules: [1000, 100], count: 4 }]
正常来说，3200  / 1000，那我应该减少 300 对吧~ 
如果要遍历数组 (4*400 / 1000) 结果则为 200，是错误的嗷。**

😎 那么解题思路是，我们要把规则进行分组，然后将每个组对应的价格数量进行累加。之后进行除余的操作算出满减了多少就可以。

coding开始了~~


```
// 我们先得到我们想要的组
const format =  arr.reduce((prev,current)=>{
    const type = current.rules.join("_");
    if (type) { // 如果有满减规则
    if(prev[type]){
            prev[type] += current.price*current.count; // 已经有值了 ，那就进行累加
        }
        else {
            prev[type] = current.price*current.count; // 初始化没有值则赋值
        } 
    }
    return prev;
},{})
let sum = 0; // 满减总额
for (let key in format) {
    const  [max,cut] = key.split("_"); // 获取满减符合金额与要减的钱数
    sum += Math.floor(format[key]/max)*cut; // 累加
}
console.log(sum) // 2260 ,  如果你得到的是2060，说明你做错了嗷~
``` 

