加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

你试过跳过if写代码吗?

发布时间:2021-06-02 02:13:14 所属栏目:业界 来源:互联网
导读:示例1: 统计数组中的奇数 假设我们有一个整数数组arrayOfIntegers,此刻必要统计个中奇数的个数: const arrayOfIntegers = [1, 4, 5, 9, 0, -1, 5]; 行使if let

示例1: 统计数组中的奇数

 

假设我们有一个整数数组arrayOfIntegers,此刻必要统计个中奇数的个数:

 

const arrayOfIntegers = [1, 4, 5, 9, 0, -1, 5]; 

行使if

 

let counter = 0; 

arrayOfIntegers.forEach((integer) => { 

  const remainder = Math.abs(integer % 2); 

  if (remainder === 1) { 

    counter++; 

  } 

}); 

 

console.log(counter); 

console.log(counter);

 

不消if

 

let counter = 0; 

 

arrayOfIntegers.forEach((integer) => { 

  const remainder = Math.abs(integer % 2); 

  counter += remainder; 

}); 

 

console.log(counter); 

不消if时,我们奇妙地操作了奇数与偶数的特征,它们除以2的余数别离是0和1。

 

示例2: 判定事变日和周末

 

给定一个日期(好比new Date()),判定它是事变日照旧周末,别离返回”weekend”和”weekday”。

 

行使if

 

const weekendOrWeekday = (inputDate) => { 

  const day = inputDate.getDay(); 

 

  if (day === 0 || day === 6) { 

    return 'weekend'; 

  }  

   

  return 'weekday'; 

 

  // Or, for ternary fans: 

  // return (day === 0 || day === 6) ? 'weekend' : 'weekday'; 

}; 

 

console.log(weekendOrWeekday(new Date())); 

不消if

 

const weekendOrWeekday = (inputDate) => { 

  const day = inputDate.getDay(); 

 

  return weekendOrWeekday.labels[day] ||  

         weekendOrWeekday.labels['default']; 

}; 

 

weekendOrWeekday.labels = {  

  0: 'weekend',  

  6: 'weekend',  

  default: 'weekday'  

}; 

 

console.log(weekendOrWeekday(new Date())); 

你是否发明if语句中着实隐含着一些信息呢?它汇报我们哪一天是周末,哪一天是事变日。因此,要去掉if语句的话,我们只必要把这些信息写入weekendOrWeekday.labels工具,然后直接行使它就好了。

 

告白: 假如你必要监控线上JavaScript代码的错误的话,接待免费行使Fundebug!

 

示例3: doubler函数

 

写一个doubler函数,它会按照参数的范例,举办差异的操纵:

 

假如参数是数字,则乘以2(i.e. 5 => 10, -10 => -20);

假如参数是字符串,则每个字符一再2次 (i.e. 'hello' => 'hheelloo');

假如参数是函数,则挪用2次;

假如参数是数组,则将每一个元素作为参数,挪用doubler函数

假如参数是工具,则将每个属性值作为参数,挪用doubler函数

行使switch

 

const doubler = (input) => { 

  switch (typeof input) { 

    case 'number': 

      return input + input; 

    case 'string': 

      return input 

        .split('') 

        .map((letter) => letter + letter) 

        .join(''); 

    case 'object': 

      Object.keys(input) 

            .map((key) => (input[key] = doubler(input[key]))); 

      return input; 

    case 'function': 

      input(); 

      input(); 

  } 

}; 

 

console.log(doubler(-10)); 

console.log(doubler('hey')); 

console.log(doubler([5, 'hello'])); 

console.log(doubler({ a: 5, b: 'hello' })); 

console.log( 

  doubler(function() { 

    console.log('call-me'); 

  }), 

); 

不消switch

 

const doubler = (input) => { 

  return doubler.operationsByType[typeof input](input); 

}; 

 

doubler.operationsByType = { 

  number: (input) => input + input, 

  string: (input) => 

    input 

      .split('') 

      .map((letter) => letter + letter) 

      .join(''), 

  function: (input) => { 

    input(); 

    input(); 

  }, 

  object: (input) => { 

    Object.keys(input) 

          .map((key) => (input[key] = doubler(input[key]))); 

    return input; 

  }, 

}; 

可知,我将每一种参数范例对应的操纵绑定到了doubler.operationsByType,这样不必要switch语句,就可以实现doubler函数了。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读