#每日一题 数据处理
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,说明你做错了嗷~






