美文网首页
多元判断的Object和Map表示

多元判断的Object和Map表示

作者: 海豚先生的博客 | 来源:发表于2022-11-17 23:36 被阅读0次
    /**
     * 按钮点击事件
     * @param {number} status 活动状态:1进行中 2失败 3 成功 4 售罄 5 未开团
     * @param {string} identity 身份标识:guest客态 master主态
     */
    第一种 Object形式
    const actions = {
      'guest_1':()=>{/*do sth*/},
      'guest_2':()=>{/*do sth*/},
      'master_1':()=>{/*do sth*/},
      'master_2':()=>{/*do sth*/},
      //....
    }
    
    const onButtonClick = (identity,status)=>{
      let action = actions[`${identity}_${status}`] || actions['default']
      action.call(this)
    }
    第二种 Map形式
    const actions = new Map([
      [{identity:'guest',status:1},()=>{/*do sth*/}],
      [{identity:'guest',status:2},()=>{/*do sth*/}],
      [{identity:'master',status:1},()=>{/*do sth*/}],
      [{identity:'master',status:2},()=>{/*do sth*/}],
      //...
    ])
    const onButtonClick = (identity,status)=>{
      let action = [...actions].find(([key,value])=>(key.identity == identity && key.status == status))
      action[1].call(this);
    }
    // 如果增加判断,status1-4的处理逻辑一样,并且所有guest都上报埋点
    const actions = ()=>{
      const functionA = ()=>{/*do sth*/}
      const functionB = ()=>{/*do sth*/}
      const functionC = ()=>{/*do sth*/}
      const functionD = ()=>{/*do sth*/}
      const functionE = ()=>{/*send log*/}
      // map的优势在于key可以任何类型
      return new Map([
        [/^guest_[1-4]$/,functionA],
        [/^guest_5$/,functionB],
        [/^guest_.*$/,functionE],
        [/^master[1-4]$/,functionC],
        [/^master_5$/,functionD],
        //...
      ])
    }
    
    const onButtonClick = (identity,status)=>{
      let action = [...actions()].filter(([key,value])=>(key.test(`${identity}_${status}`)))
      action.forEach(([key,value])=>value.call(this))
    }
    
    

    相关文章

      网友评论

          本文标题:多元判断的Object和Map表示

          本文链接:https://www.haomeiwen.com/subject/lifmxdtx.html