Face JS(一)(字符串反转、防抖、数组去重、实现new)

2020-08-05  本文已影响0人  再见地平线_e930

1.字符串反转

const str = 'I am a big boy';
const result = str.split('').reverse().join('');
console.log(result);

*split(): 把字符串根据分隔符转化成数组
*reverse(): 反转数组
*join(): 把数组根据分隔符转化为字符串

结果: image.png

2.防抖

        // fn为用户传入的需要防抖的函数或方法
        // wait 是需要等待的时间
        const debounce = (fn, wait = 300) => {
            let timer = 0; // 设置定时器
            return function(...args) { // args为fn的参数
                if(timer) { // 如果已经过了规定延迟的时间,则清空定时器
                    clearTimeout(timer);
                }
                timer = setTimeout(() => {
                    fn.apply(this, args); 
                }, wait)
            }
        }
        // 防抖的意义就在于每次用户调用一个方法,这个方法都必须等待相应延迟时间(wait)后才会执行

3.数组去重(只列举部分方法)

1.两个 for 循环去重

        let arr = [1, 1, 1, 'qq', 'cc', 1, 'qq', undefined, 'cc', undefined, 2, 3, 'qq'];
        for(let i=0; i<arr.length; i++) {
            for(let j=i+1; j<arr.length; j++) {
                if(arr[i] === arr[j]) {
                    arr.splice(j, 1);
                    j--;
                }
            }
        }
        console.log(arr);
结果: image.png

但是这个方法有局限性(无法去除 {} 和 NaN):

        let arr = [{}, {}, NaN, NaN, 1, 1, 1, 'qq', 'cc', 1, 'qq', undefined, 'cc', undefined, 2, 3, 'qq'];
        for(let i=0; i<arr.length; i++) {
            for(let j=i+1; j<arr.length; j++) {
                if(arr[i] === arr[j]) {
                    arr.splice(j, 1);
                    j--;
                }
            }
        }
        console.log(arr);
结果: image.png

2.ES6 的 Set 去重(可去除重复的NaN,但无法去重多余的 {})

        let arr = [1, 1, 1, 'qq', 'cc', 1, 'qq', undefined, 'cc', undefined, 2, 3, 'qq'];
        let result = Array.from(new Set(arr));
        console.log(result);
结果: image.png

4.实现 new

// 创建一个新的对象,这个对象的__proto__要指向构造函数的原型对象
// 执行构造函数
// 返回值如果为 object 类型则作为 new 方法的返回值返回,否则返回上述全新对象
        function myNew(fn, ...args) {
            let instance = Object.create(fn.prototype);
            let res = fn.apply(instance, args);
            return typeof res === 'object' ? res: instance;
        }

Object.create() 创建一个新对象
参数:proto(必须),该参数会被赋值到新建对象的原型上。
返回值:在指定原型对象上添加新属性后的对象

上一篇 下一篇

猜你喜欢

热点阅读