#每日一题 数据处理

·

2 min read

      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,说明你做错了嗷~