1.防抖
概念:防止一个函数在段时间内疯狂执行
场景: 1.联想查询 2.onresize 3.滚动事件scroll
//绿色基础版:
function debounce(doSomething,wait){
var timeout;//需要一个外部变量,为增强封装,所以使用闭包
return function(){
var _this = this,
_arguments = arguments;//arguments中存着e
clearTimeout(timeout);
timeout = setTimeout(function(){
doSomething.apply(_this,_arguments);
},wait);
}
}
2.节流
概念:限制一个函数在一定的时间内只执行一次。
场景: 1.连续点击按钮触发时
代码:
function throttle(doSomething,wait){
var timeout;
return function(){
var _this = this;
_arguments = arguments;
if(!timeout){
timeout = setTimeout(function(){
timeout = null;
doSomething.apply(_this,_arguments);
},wait);
};
}
}
3.for..in,forEach,for..of区别
-
forEach不支持break,continue,return等。
-
for..of 可以迭代数组、字符串、arguments类数组对象、DOM集合、Map、Set、generators,迭代的是value值。 www.html.cn/archives/83…
-
for..in 遍历数组会遍历到数组原型上的属性和方法,适合遍历对象,迭代的是key值。
var obj = {a:1, b:2, c:3};
for (var prop in obj) {
console.log("obj." + prop + " = " + obj[prop]);
}
// 输出:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
4.ES6的数组 (juejin.cn/post/684490…)
- forEach 不能中断遍历,没有返回值
- map 返回由原数组调用某一方法后返回的一组新数组
- filter 根据过滤条件返回一个新数组,会改变原数组
- some 如果有一个条件符合会返回true
- every 每一项都符合条件,会返回true
- find 返回查找的值,找到第一个符合这个条件的就返回
- findIndex 返回数组中符合条件的第一个元素的索引值,否则就返回-1
- reduce 根据callback中的条件对数组中的每个元素都进行类加的操作,返回一个全新的值
- includes 判断一个数组是否包含一个指定的值,返回布尔值
- form 可以将类数组转换为真正的数组
- copyWithin 将当前数组中指定位置的元素复制到另外一个位置,并且会覆盖那个位置的原有元素,会修改原来的数组
// 有三个参数
1. target(必须):从该位置开始替换数据,如果是负值,则倒数
2. start(可选):从该位置读取数据,默认0,负值同上
3. end(可选):到这个位置停止读取数据,默认等于数组长度,负值同上
let p = [1,2,3,4,5,6,7]
p.copyWithin(0,5,7)
[6, 7, 3, 4, 5, 6, 7]
- fill 通过给定值,填充一个数组
let sz = [1,2,3,4,5,6]
sz.fill(1) // [1,1,1,1,1,1]
sz.fill(1,0,3)
// 接受三个参数,第一个为填充值,第二个为起始位置,第三个为截至位置
sz.fill(1,3)
// 如果省略最后一个参数,则默认从起始位置到数组默认长度结束
5.对象的删除,数组的删除
二维数组转换成一维数组
var newvote = [0:[{},{},{}] ,1:[{},{}]]
function fnArrOpen(){
var arr=[];
newvote.map(function(val,index){
arr.push(...val);
});
return arr;
}
二维对象转换成一维对象