ES6高级技巧(三)
html转译
let c='<a href="#">Me & you</a>'.replace(/[&<>'"]/g,item=>{
  let a={
    '&': '&',
    '<': '<',
    '>': '>',
    "'": ''',
    '"': '"'
  };
  return a[item]||item
  }
)
console.log(c)
数字前面加密
const mask = (cc, num = 4, mask = '*') => `${cc}`.slice(-num).padStart(`${cc}`.length, mask);
mask(1234567890); // '******7890'
mask(1234567890, 3); // '*******890'
mask(1234567890, -4, '$'); // '$$$$567890'
字符串倒序
const reverseString = str => [...str].reverse().join('');
reverseString('foobar'); // 'raboof'
字符串升序
localeCompare可以用来判断升序还是降序
const sortCharactersInString = str =>
[...str].sort((a, b) => a.localeCompare(b)).join('');
字符串 数组交换位置
字符串
const stringPermutations = str => {
  if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];
  return str
    .split('')
    .reduce(
      (acc, letter, i) =>
        acc.concat(stringPermutations(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)),
      []
    );
};
stringPermutations('abc'); // ['abc','acb','bac','bca','cab','cba']
数组
const permutations = arr => {
  if (arr.length <= 2) return arr.length === 2 ? [arr, [arr[1], arr[0]]] : arr;
  return arr.reduce(
    (acc, item, i) =>
      acc.concat(
        permutations([...arr.slice(0, i), ...arr.slice(i + 1)]).map(val => [item, ...val])
      ),
    []
  );
};
promise一种写法
let a=Promise.resolve([1,2,3,4]).then(res=>res.map(v=>v*5))
a.then(res=>{
  console.log(res)
  })
事件委托的另一种方式填充数据
<div id="a"></div>
<script>
  let a = document.querySelector('#a')
  let arr = ['1', '2']
  a.innerHTML+=arr.map(val=>`<li>${val}</li>`).join('')
</script>
正则
不能是开头:(?<!^)
三个数字:(\d{3})
后面要正好是3的整数倍个数字:(?=(\d{3})*$)
合起来就是 /(?<!^)(\d{3})(?=(\d{3})*$)/g,我们需要一个g表示全局匹配,测试一下:
const newRegexp = /(?<!^)(\d{3})(?=(\d{3})*$)/g
const numStr = '1234567890'
console.log(numStr.match(newRegexp))
// ["234", "567", "890"]
in
如果是数组,返回索引
如果是对象,返回属性
算法和数据结构
在sort()方法中,V8引擎对sort方法执行小于10个使用插入排序,大于十个使用快速排序
对于多个条件,使用Array.includes
const checkCarModel = (model) => {
    if(model === 'renault' || model === 'peugeot') {
    console.log('model valid');
    }
}
checkCarModel('renault'); // 输出 'model valid'
修改版
const checkCarModel = (model) => {
    if(['peugeot', 'renault'].includes(model)) {
    console.log('model valid');
    }
}
匹配所有条件,使用Array.every 或者Array.find
const checkEveryModel = (model) => {
  return cars.every(car => car.model === model);
}
const checkEveryModel = (model) => {
  return cars.find(car => car.model !== model) === undefined;
}
匹配部分条件
const cars = [
  { model: 'renault', year: 1956 },
  { model: 'peugeot', year: 1968 },
  { model: 'ford', year: 1977 }
];
const checkForAnyModel = (model) => {
  return cars.some(car => car.model === model);
}
如何避免if多层分支
先考虑不符合条件的情况
如果A不符合的,B不符合的,A&&B不符合的
使用索引或者映射,而不是switch
反例
const getCarsByState = (state) => {
  switch (state) {
    case 'usa':
      return ['Ford', 'Dodge'];
    case 'france':
      return ['Renault', 'Peugeot'];
    case 'italy':
      return ['Fiat'];
    default:
      return [];
  }
}
修改版
const cars = new Map()
  .set('usa', ['Ford', 'Dodge'])
  .set('france', ['Renault', 'Peugeot'])
  .set('italy', ['Fiat']);
const getCarsByState = (state) => {
  return cars.get(state) || [];
}
console.log(getCarsByState()); // 输出 []
console.log(getCarsByState('usa')); //输出 ['Ford', 'Dodge']
console.log(getCarsByState('italy')); // 输出 ['Fiat']
或者(这个很牛逼)
const carState = {
  usa: ['Ford', 'Dodge'],
  france: ['Renault', 'Peugeot'],
  italy: ['Fiat']
};
const getCarsByState = (state) => {
  return carState[state] || [];
}
console.log(getCarsByState()); // 输出 []
console.log(getCarsByState('usa')); // 输出 ['Ford', 'Dodge']
console.log(getCarsByState('france')); // 输出 ['Renault', 'Peugeot']
###########################.............................................................................................................................................................................................
ES6高级技巧(三)的更多相关文章
- React与ES6(三)ES6类和方法绑定
		
React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...
 - 关于阮一峰老师es6(第三版)中管道机制代码的理解浅析
		
最近正在学习阮一峰老师的es6(第三版)教材,在学到第七章<函数的扩展>中的箭头函数嵌套时,文中提到了一个关于“管道机制”的示例,文中源代码如下: //es6(第三版)教材中的管道机制源代 ...
 - 深入浅出ES6(三):生成器 Generators
		
作者 Jason Orendorff github主页 https://github.com/jorendorff ES6生成器(Generators)简介 什么是生成器? 我们从一个示例开始: ...
 - JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
		
1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...
 - ES6核心内容精讲--快速实践ES6(三)
		
Promise 是什么 Promise是异步编程的一种解决方案.Promise对象表示了异步操作的最终状态(完成或失败)和返回的结果. 其实我们在jQuery的ajax中已经见识了部分Promise的 ...
 - 摧枯拉朽,说说ES6的三把火
		
阅读目录 我是 Jser 我骄傲 作用域 模块系统 类(Class) 我是 Jser 我骄傲 JavaScript 如今可谓是屌丝逆袭高富帅的代名词哈,从当初闹着玩似的诞生到现在 Github 上力压 ...
 - 用vue.js学习es6(三):数组、对象和函数的解构
		
一.数组的解构: 以前的方式: var arr = [1,2,3]; console.log(arr[0]); //1 console.log(arr[1]); //2 现在的方式: var [a,b ...
 - es6(三):es6中函数的扩展(参数默认值、rest参数、箭头函数)
		
1.函数可以设置参数默认值 function test1(x,y=1){ console.log(x,y) } test1(10)//10 1 2.rest参数:形式为...变量名 function ...
 - 从零开始学 Web 之 ES6(三)ES6基础语法一
		
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
 
随机推荐
- python——CSV转Excel
			
在转换之前,事先需要将csv文件另存为此格式 import pandas as pd def csv_to_xlsx_pd(): csv = pd.read_csv(r'C:\Users\Jery\D ...
 - NI CWGraph 显示波形图
			
ptrWaveBox.Axes(1).Maximum = 1000 ptrWaveBox.Axes(2).Maximum = 20 ptrWaveBox.Axes(2).Minimum = 0 Dim ...
 - idea svn 文件还原到指定版本
			
使用svn经常会遇见,由于自己或者其他同事的提交(或者误操作),把原本正确代码或文件覆盖掉了,现在就得需要恢复到之前指定的某个版本. 先打开指定的文件,然后右上角点击时间的按钮: 这比会出现以前的许多 ...
 - Spring通过配置类加载实体bean
			
以下4个java类都在都一个包下: 1.定义接口 public interface AA { void play(); } 2.定义实体bean //组件注解,表明该类是一个组件 @Component ...
 - VSCode在Ubuntu下快捷键和Windows下不一致的解决办法
			
Windows下切换前一次和后一次光标位置,用的快捷键是Alt+<-和Alt+->.很遗憾,Ubuntu下并不是这个快捷键.不清楚为什么VSCode不提供统一的快捷键,但对于我来说,我很想 ...
 - 深入理解Java封装、继承、多态
			
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10830957.html 一:封装 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法 ...
 - Elasticsearch+x-pack认证license过期处理
			
介绍: x-pack是Elasticsearch中的一个plugin,主要功能是实现认证功能 报错: 类似下面这样的报错,是因为licese过期导致的 解决: 1.首先去Elasticsearch的官 ...
 - IE zoom:1
			
overflow:hidden zoom:1 一起出现克服IE6 bug display:inline-block display:inline zoom:1 一起出现克服IE6bug
 - 09-赵志勇机器学习-k-means
			
(草稿) k-means: 1. 随机选取n个中心 2. 计算每个点到各个中心的距离 3. 距离小于阈值的归成一类. 4. 计算新类的质心,作为下一次循环的n个中心 5. 直到新类的质心和对应本次循环 ...
 - swiper使用总结-坑点汇总
			
1.开发中遇到个坑,ScrollableTabView(选项卡)+swiper(轮播图)在安卓下,初始化的第一页不会渲染,需要在ScrollableTabView挂载完毕后再渲染swiper. 解决方 ...