Skip to main content

Command Palette

Search for a command to run...

#每日一题 数据处理

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

More from this blog

Object.freeze() vs Object.seal() vs Object.preventExtensions()

今日详解ES5相关知识,区分下这三者的关系 Object.freeze() 冻结一个对象。这实际上是使对象不可变的最严格的方法。它执行以下操作: 防止添加新属性 不允许删除现有属性 不允许更改的直接属性 可以修改子对象的属 Object.seal() 封闭对象,防止向对象添加新属性。它执行以下操作: 允许更改对象的现有属性 防止添加新属性 不允许删除现有属性 Object.preventExtensions() 防止向对象添加新属性(即防止将来扩展对象)。它执行以下操作: 允许更改...

May 7, 20221 min read87
Object.freeze() vs Object.seal() vs Object.preventExtensions()

解决Virmach Vps, 谷歌搜索频繁人机验证问题

virmach机器速度还可以,但谷歌搜索的时候频繁出现“reCAPTCHA”人机验证,实在无解.. 查得问题是 virmach大部分是 RN、CC机房 IP段可能处于Google黑名单...、 1. 申请IPV6隧道 virmach并不自带ipv6, 则使用IPv6 隧道。 申请 https://tunnelbroker.net [一个账号可以申请 5 个隧道] 注册登陆。 在左侧的 User Functions 中,点击 Create Regular Tunnel. IPv4 E...

Dec 9, 20211 min read286
解决Virmach Vps, 谷歌搜索频繁人机验证问题
L

lolis

12 posts

#每日一题 数据处理