js

170 阅读2分钟

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;
  }

二维对象转换成一维对象