内容简介:repo:Python和JavaScript在笔者看来是很相似的语言,本文归纳了JavaScript的各种tricks,相对于之前的Python版。两篇文章都读完,有没有发现它们的目录结构是一个样的呢XD
repo: github.com/alphardex/p…
Python和JavaScript在笔者看来是很相似的语言,本文归纳了JavaScript的各种tricks,相对于之前的 Python 版。
两篇文章都读完,有没有发现它们的目录结构是一个样的呢XD
基本
模板字符串
let name = 'alphardex' `Ore wa ${name} desu, ${4 * 6} sai, gakusei desu.` // "Ore wa desu, 24 sai, gakusei desu." 复制代码
三元运算符
// if(condition){ // fuck // } else { // shit // } (condition)? fuck: shit 复制代码
字符串的拼接,反转与分割
let letters = ['h', 'e', 'l', 'l', 'o'] letters.join('') // "hello" letters.reverse() // ["o", "l", "l", "e", "h"] let name = 'nameless god' name.split(' ') // ['nameless', 'god'] 复制代码
判断元素的存在性
'fuck you'.includes('fuck') // true ['bitch', 'whore'].includes('slut') // false 'company' in {'title': 'SAO III', 'company': 'A1 Pictures'} // true 复制代码
函数
箭头函数
函数的简化写法,配合map、filter、sort等实现函数式编程
// function foo(parameters){ // return expression // } let foo = (parameters) => expression 复制代码
map - 映射
let numbers = [1, 2, 3, 4, 5]; numbers.map(e=>e ** 2) // [1, 4, 9, 16, 25] 复制代码
filter - 过滤
let values = [null, undefined, NaN, 0, '', true, 'alphardex', 666] values.filter(e=>e) // [true, "alphardex", 666] 复制代码
sort - 排序
let numbers = [4, 2, 5, 1, 3]; numbers.sort((a, b)=>b-a) // [5, 4, 3, 2, 1] 复制代码
其他骚操作
求1到100的和
[...Array(101).keys()].reduce((a, b)=>a+b) // 5050 // 或者用lodash实现,写法简直跟Python一模一样 // _.sum(_.range(101)) 复制代码
扁平化数组
const flatten = (arr, depth=1) => arr.reduce((a, v)=>a.concat(depth>1 && Array.isArray(v)?flatten(v, depth-1):v), []) let arr = [1, [2, 3, ['a', 'b', 4], 5], 6] flatten(arr, 2) // [1, 2, 3, "a", "b", 4, 5, 6] // 或者用ES10新增的flat // arr.flat(2) 复制代码
扩展运算符
数据结构的合并
let arr1 = ['a', 'b'] let arr2 = [1, 2] [...arr1, ...arr2] // ['a', 'b', 1, 2] let obj1 = {'name': 'alphardex'} let obj2 = {'age': 24} {...obj1, ...obj2} // {name: 'alphardex', age: 24} 复制代码
函数参数的打包
let foo = (...args) => console.log(args) foo(1, 2) // [1, 2] 复制代码
数据结构
数组
推导式
由于推导式暂时不在标准规范内,因此用高阶函数配合箭头函数代替
let even = [...Array(10).keys()].filter(e=>e%2!==1) even // [0, 2, 4, 6, 8] 复制代码
同时迭代元素与其索引
相当于Python的enumerate
let li = ['a', 'b', 'c'] li.map((e, i)=>`${i+1}. ${e}`) // ["1. a", "2. b", "3. c"] 复制代码
元素的追加与连接
push在末尾追加元素,concat在末尾连接元素
let li = [1, 2, 3] li.push([4, 5]) li // [1, 2, 3, [4, 5]] li.concat([4, 5]) li // [1, 2, 3, [4, 5], 4, 5] 复制代码
测试是否整体/部分满足条件
every测试所有元素是否都满足于某条件,some则是测试部分元素是否满足于某条件
[1, 2, 3, 4, 5].every(e=>e<20) // true [1, 3, 4, 5].some(e=>e%2===0) // true 复制代码
同时迭代2个以上的数组
相当于Python的zip
let subjects = ['nino', 'miku', 'itsuki'] let predicates = ['saikou', 'ore no yome', 'is sky'] subjects.map((e,i)=>`${e} ${predicates[i]}`) // ["nino saikou", "miku ore no yome", "itsuki is sky"] 复制代码
去重
利用集合的互异性,同时此法还保留了原先的顺序
let li = [3, 1, 2, 1, 3, 4, 5, 6] [...new Set(li)] // [3, 1, 2, 4, 5, 6] 复制代码
解构赋值
最典型的例子就是2数交换
let [a, b] = [b, a] 复制代码
用rest运算符可以获取剩余的元素
let [first, ...rest] = [1, 2, 3, 4] first // 1 rest // [2, 3, 4] 复制代码
对象
遍历
let obj = {name: "alphardex", age: 24} Object.keys(obj) // ["name", "age"] Object.values(obj) // ["alphardex", 24] Object.entries(obj).map(([key, value])=>`${key}: ${value}`) // ["name: alphardex", "age: 24"] 复制代码
排序
let data = [{'rank': 2, 'author': 'beta'}, {'rank': 1, 'author': 'alpha'}] data.sort((a, b)=>a.rank - b.rank) // [{'rank': 1, 'author': 'alpha'}, {'rank': 2, 'author': 'beta'}] 复制代码
反转
let obj = {name: 'alphardex', age: 24} Object.fromEntries(Object.entries(obj).map(([key, value])=>[value, key])) // {24: "age", alphardex: "name"} // 或者用lodash实现 // _.invert(obj) 复制代码
缺失键处理
如果键不在字典中,返回一个默认值,类似Python的dict.get
let obj = {name: "alphardex", age: 24} obj.sex || 'male' // male 复制代码
如果键不在字典中,将会添加它并设置一个默认值,类似Python的dict.setdefault
let obj = {name: "alphardex", age: 24} obj.sex = obj.sex || 'male' // "male" obj // {name: "alphardex", age: 24, sex: "male"} 复制代码
分组
在Python中可以利用defaultdict(list)对数据进行分组
在JS中可以用Proxy来实现defaultdict
class DefaultDict { constructor(defaultFactory) { return new Proxy({}, { get: (target, name) => name in target ? target[name] : (target[name] = typeof defaultFactory === 'function' ? new defaultFactory().valueOf() : defaultFactory) }) } } let people = [['alphardex', 'male'], ['koizumi moeka', 'female'], ['alphardesu', 'male'], ['satou hinata', 'female']] let genderGroup = new DefaultDict(Array) people.map(([name, gender])=>{genderGroup[gender].push(name)}) genderGroup.male // ["alphardex", "alphardesu"] genderGroup.female // ["koizumi moeka", "satou hinata"] 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
运营其实很简单:互联网运营进阶之道
郑文博 / 人民邮电出版社 / 2018-2 / 49.80元
为了帮助从事运营或即将从事运营的广大读者更好、更快地了解运营、学习运营、入职运营,本书详细阐述运营对于用户、企业的帮助,同时以单个理论点 单个实战案例的方式详细分析了社群运营、活动运营、新媒体运营、内容运营、渠道运营、精细化运营、场景化运营、用户化运营、商业化运营等模块及运营工作、渠道整合、社群知识、渠道优化、SOP流程等细节,力求让读者在求职路上快速上手,在迷茫途中快速定位。 《运营其实很简单 ......一起来看看 《运营其实很简单:互联网运营进阶之道》 这本书的介绍吧!