JS杂学笔记
1.数组扁平化
let arr=[1,[2,3,[4,5]],6]
let str=JSON.stringify(arr)
调用ES6中的flat方法
arr=arr.flat(Infinity)
replace + split
ary = str.replace(/(\[|\])/g, '').split(',')
replace + JSON.parse
str = str.replace(/(\[|\]))/g, ''); str = '[' + str + ']'; ary = JSON.parse(str);
普通递归
let result = []; let fn = function(ary) { for(let i = 0; i < ary.length; i++) { let item = ary[i]; if (Array.isArray(ary[i])){ fn(item); } else { result.push(item); } } }
利用reduce函数迭代
function flatten(ary) { return ary.reduce((pre, cur) => { return pre.concat(Array.isArray(cur) ? flatten(cur) : cur); }, []); } let ary = [1, 2, [3, 4], [5, [6, 7]]] console.log(flatten(ary))
扩展运算符
while (ary.some(Array.isArray)) { ary = [].concat(...ary); }
2.高阶函数
map
参数:接受两个参数,一个是回调函数,一个是回调函数的this值。回调函数默认被传入三个值,依次为当前元素,当前索引,整个数组。
原理:创建一个新数组,其结果是该数组的每个元素都调用一个提供的函数后返回的结果。
影响:对原来的数组没有影响。
let nums = [1, 2, 3]; let obj = {val: 5}; let newNums = nums.map(function(item,index,array) { return item + index + array[index] + this.val; //对第一个元素,1 + 0 + 1 + 5 = 7 //对第二个元素,2 + 1 + 2 + 5 = 10 //对第三个元素,3 + 2 + 3 + 5 = 13 }, obj); console.log(newNums);//[7, 10, 13]
reduce
参数:接受两个参数,一个是回调函数,另一个为初始值,回调函数中三个默认参数,依次为积累值,当前值,整个数组。
let nums = [1, 2, 3]; // 多个数的加和 let newNums = nums.reduce(function(preSum,curVal,array) { return preSum + curVal; }, 0); console.log(newNums);//6
filter
参数:一个函数参数,这个函数接受一个默认参数,就是当前元素,这作为参数的函数返回值为一个布尔类型,决定元素是否保留。
原理:filter方法返回值为一个新的数组,这个数组里面包含参数里面所有被保留的项。
let nums = [1, 2, 3]; // 保留奇数项 let oddNums = nums.filter(item => item % 2); console.log(oddNums);
sort
参数:一个用于比较的函数,他又两个默认参数,分别是代表比较的两个元素。
let nums = [2, 3, 1]; //两个比较的元素分别为a, b nums.sort(function(a, b) { if(a > b) return 1; else if(a < b) return -1; else if(a == b) return 0; })
3.JS中的this
全局上下文场景下
全局上下文默认this指向window,严格模式下指向undefined。
直接调用函数场景下
let obj = { a: function() { console.log(this); } } let func = obj.a; func();
该场景下是直接调用,this相当于全局上下文的情况
对象.方法的调用
obj.a();
该场景下this指向这个对象
DOM时间绑定
onclick和addeventlistener中的this默认指向绑定事件的元素。(IE浏览器下attachevent的this指向window)、
new+构造函数
此时构造函数中的this指向实例对象
箭头函数
箭头函数没有this,因此也不能绑定。里面的this会指向当前最近的非箭头函数的this。找不到就是window(严格模式下为undefined)
优先级: new > call、apply、bind > 对象.方法 > 直接调用
原文地址:https://www.cnblogs.com/longflag/p/11792747.html
- JDK容器学习之Map: HashMap,TreeMap,LinkedHashMap对比小结
- 14.4 exportfs命令
- 不用那么多,每天一点点,学习React,贵在持之以恒
- Linux基础(day56)
- android classloader双亲委托模式
- 14.3 NFS配置选项
- 14.2 NFS服务端安装配置
- React Native组件之Button
- JDK容器学习之TreeMap (二) : 使用说明
- 从React和angular看技术路线的分歧
- JDK容器学习之LinkedHashMap (一):底层存储结构分析
- Linux基础(day60)
- 16.5/16.6/16.7 配置Tomcat虚拟主机
- JDK容器学习之LinkedHashMap(二):迭代遍历的实现方式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP使用JPGRAPH制作圆柱图的方法详解
- PHP 实现超简单的SESSION与COOKIE登录验证功能示例
- PHP 图像处理与SESSION制作超简单验证码的方法示例
- 简述PHP7.4 新特性和废弃的功能
- laravel5.1框架下的批量赋值实现方法分析
- Laravel框架环境与配置操作实例分析
- 记Laravel调用Gin接口调用formData上传文件的实现方法
- Laravel框架视图和模型操作方法分析
- 接口测试框架实战(六) | 配置的数据驱动
- PHP连续签到功能实现方法详解
- PHP实现发送微博消息功能完整示例
- php实现快速对二维数组某一列进行组装的方法小结
- PHP实现提取多维数组指定一列的方法总结
- PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
- Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解