html转译

let c='<a href="#">Me & you</a>'.replace(/[&<>'"]/g,item=>{
let a={
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
"'": ''',
'"': '&quot;'
};
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高级技巧(三)的更多相关文章

  1. React与ES6(三)ES6类和方法绑定

    React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...

  2. 关于阮一峰老师es6(第三版)中管道机制代码的理解浅析

    最近正在学习阮一峰老师的es6(第三版)教材,在学到第七章<函数的扩展>中的箭头函数嵌套时,文中提到了一个关于“管道机制”的示例,文中源代码如下: //es6(第三版)教材中的管道机制源代 ...

  3. 深入浅出ES6(三):生成器 Generators

    作者 Jason Orendorff  github主页  https://github.com/jorendorff ES6生成器(Generators)简介 什么是生成器? 我们从一个示例开始: ...

  4. JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值

    1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...

  5. ES6核心内容精讲--快速实践ES6(三)

    Promise 是什么 Promise是异步编程的一种解决方案.Promise对象表示了异步操作的最终状态(完成或失败)和返回的结果. 其实我们在jQuery的ajax中已经见识了部分Promise的 ...

  6. 摧枯拉朽,说说ES6的三把火

    阅读目录 我是 Jser 我骄傲 作用域 模块系统 类(Class) 我是 Jser 我骄傲 JavaScript 如今可谓是屌丝逆袭高富帅的代名词哈,从当初闹着玩似的诞生到现在 Github 上力压 ...

  7. 用vue.js学习es6(三):数组、对象和函数的解构

    一.数组的解构: 以前的方式: var arr = [1,2,3]; console.log(arr[0]); //1 console.log(arr[1]); //2 现在的方式: var [a,b ...

  8. es6(三):es6中函数的扩展(参数默认值、rest参数、箭头函数)

    1.函数可以设置参数默认值 function test1(x,y=1){ console.log(x,y) } test1(10)//10 1 2.rest参数:形式为...变量名 function ...

  9. 从零开始学 Web 之 ES6(三)ES6基础语法一

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

随机推荐

  1. 在Go1.11.1中使用go module管理依赖

    今天试验了一下go的版本管理Go moule,只是安装了下,由于目前还没有进行大的项目开发,暂时没有碰到坑. 使用了模块后,可以不用在GOPATH中再建立src目录了,直接在GOPATH中就行 另外, ...

  2. Flask路由系统

    Flask路由系统 我们之前了解了路由系统是由带参数的装饰器完成的. 路由本质:装饰器和闭包实现的. 设置路由的两种方式 第一种: @app.route('/index') def index(): ...

  3. Git恢复删除的分支

    1.使用 git reflog 命令查看显示整个本地仓储的commit,包括所有branch的commit,甚至包括已经撤销的commit. 2.找到我们想要恢复的分支 ,可以看到我们当时commit ...

  4. JIRA的安装及配置

    JIRA安装    命令行打开服务:cmd:services.msc 同禅道和tapd是一样功能的. 1.安装jdk 2.安装mysql 3.安装JIRA  JIRA安装密钥的查找 1.登陆管理页面: ...

  5. 【团队项目1】 团队展示&选题

    一.团队展示 1. 队名:这次稳了 2. 队员: 莫少政 3117004667 (队长) 黄思扬 3117004657 余泽端 3117004679 江海灵 3117004658 温治乾 311700 ...

  6. spoon数据转换中文乱码(kettle)

    (1) 查看mysql数据库是否为utf8(status) (2) 设置spoon (3) 文本打开spoon.bat,找到set OPT=%OPT% %PENTAHO_DI_JAVA_OPTIONS ...

  7. DDL(数据库定义语言)(五)

    一.数据定义语言(Data Definition Language)的基本操作 定义数据库.表等,包括CREATE语句.ALTER语句.DROP语句.CREATE语句用于创建数据库.数据表等,ALTE ...

  8. 两数相加[链表加法] LeetCode.2

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  9. django+sqlite进行web开发(二)

    模板 前面的例子中,我们是直接将HTML写在了Python代码中,这种写法并不可取.我们需要使用模板技术将页面设计和Python代码分离. 模板通常用于产生HTML,但是Django的模板也能产生任何 ...

  10. C#中的函数(三)参数传递及返回值

    接前面二篇,继续开始新的研究 前面忘了说什么是主调函数与被调函数 主调函数:执行调用其它函数语句所在的函数 被调函数:被其它函数所调用的函数 简单说就是一个是发起调用者,另一个是被调用者 写个小例子说 ...