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 ...
随机推荐
- 1.Shell特殊位置变量
$0 文件名及路径 $1,$2 参数1,参数2 , 也可以用${1} 和 ${2} 来表示 $# 传递给脚本或函数的参数个数 $$ 当前Shell进程ID $? 判断上 ...
- Centos7 python虚拟环境virtualenv和virtualenvwrapper简单介绍
我的系统版本是 [root@localhost ~]# cat /etc/os-release 我的Python版本是 [root@localhost ~]# python3 -V 关于如何安装Pyt ...
- php操作cassandra
php操作 https://www.cnblogs.com/fakis/archive/2010/04/16/1976653.html 这篇文章还没试过.暂时留着有时间再实验
- 将Redis设置为后台启动
Linux 在执行redis-server /etc/redis.conf 时默认开启的是一个前台的进程,也就是说启动的redis 就做不了其他的操作了,只有关闭redis 才能做其他的操作.非常的 ...
- Python常用模块大全(转)
os模块:os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.chdir() 改变当前工作目 ...
- Object::connect: No such slot QWidget::
出现如下错误 Object::connect: No such slot QWidget::readMyCom() in ../untitled/ConversionScreen.cpp:49 解决办 ...
- pod install/update失败:Failed to connect to 127.0.0.1 port 1080: Connection refused
出现这类错误,通常是因为代理发生的,取消代理即可! 1.查看有无相关代理: git config --global http.proxy git config --global https.proxy ...
- python中的__init__(self)是什么意思呢
python中的__init__(self)是什么意思呢 init(self)这个时类的初始化函数 1 2 3 4 class Obj: def init(self): print 1 obj = O ...
- USACO Mooo Moo
洛谷 P2214 [USACO14MAR]哞哞哞Mooo Moo 洛谷传送门 JDOJ 2416: USACO 2014 Mar Silver 3.Mooo Moo JDOJ传送门 Descripti ...
- js如何安全的扩展系统函数
如果直接使用原型扩展系统函数,可能会和其他人的代码相互冲突 为了防止出现冲突,可以使用如下方法进行扩展: function MyArray(){ this.Name="MyArray&quo ...