Coder Social home page Coder Social logo

turtle-rock's Introduction

turtle 系列

turtle系列的核心精神就是 Slow is Fast,慢就是快,慢慢的积累不要停歇。自然会最终达到✌️! 乌龟是一个动物,这个动物行动迟缓,但是寿命很长,不端努力,勇攀高峰。人生是一场马拉松,不到最后没有胜负,一时的落后说明不了什么。 turtle 系列本着这个原则,复习所有相关领域的知识。慢就是快,不要着急。助你成为更好的自己!做一只快乐,积极,奋斗的小乌龟吧!

turtle-rock

  • 环境环境依赖于 node v10.0 以上
  • 项目安装
   npm install // 安装依赖
   npm run build // 项目打包
   npm run test // 运行测试用例

turtle-rock 是前端 Javascript 一些小程序和算法的的集合,方便理解 JS 里的一些语言特性,和异步。

作为一个FE,不要排斥算法,不要自己把自己的要求降低,对于基础算法的自己不要放低要求自己,其实对于一些基础算法,也不是非常难。只要像turtle一样,不停的努力就可以了!

Array

语言特性

工具类

异步控制

浏览器和其他

高频算法

下面按照 leetcode 的题顺序来列举算法

turtle-rock's People

Contributors

scofieldfan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

turtle-rock's Issues

实现JSON.parse

个人觉得作者提供的方法不严谨,如果数据是如下格式将会报错

      //通过逗号分隔将会报错
    var data = JSON.stringify({"a":"1,1",b:2})

我自己也考虑了一下实现,当然也不是特别严谨,但是杜绝了上门的问题

  function parseJSON(txt) {

    let delFun = (newObj, items) => {
        Object.keys(items).forEach(key => {
            if (typeof items[key] !== "function") {
                if (typeof items[key] !== "object") {
                    newObj[key] = items[key];
                } else {
                    delFun(newObj[key], items[keys])
                }
            }
        })
    }

    if (
        (txt.charAt(0) == "{" && txt.charAt(txt.length - 1)) == "}" ||
        txt.charAt(0) == "[" && txt.charAt(txt.length - 1) == "]"
    ) {
        let result = eval(`(()=>(${txt}))()`);

        if (Array.isArray(result)) {
            let arrRes = [];
            result.forEach(item => {
                let obj = {};
                delFun(obj, item)
                arrRes.push(obj);
            })
            return arrRes;
        } else {
            let obj = {};
            delFun(obj, result);
            return obj;
        }


    } else {
        throw (new SyntaxError('语法错误'))
    }

}

测试发现JSON.parse方法的其他情况返回结果

   JSON.parse(123)  //输出结果是123
   JSON.parse(true)  //输出结果是true
   JSON.parse("abc")  // 返回错误
   JSON.parse(/test/)  //返回错误
   JSON.parse(()=>{}) //返回错误
 

JSON.parse 的语法完整参数是:

JSON.parse(text[, reviver])
* text:必需, 一个有效的 JSON 字符串。
* reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。

debounce函数缺陷

if (timer) {

debounce(fun, delay, immediate) {
    let timer = null;
    return (...args) => {
        if (timer) { // 去掉判断语句即可
            clearTimeout(timer);
        } else {
            timer = setTimeout(() => {
                fun.apply(this, args);
            }, delay);
        }
    };
}

实现 function 的 bind 函数中,求教instanceof这句是什么意思?

     Function.prototype.mybind = function(context, ...args) {
            let fun = this;
            function bound(...args2) {
                     //如题,这句话不理解是什么意思?什么情况下  this instanceof bound ==true
                      let self = this instanceof bound ? this : context;

                        return fun.apply(self, args.concat(args2));
              }
            bound.prototype = Object.create(fun.prototype);
         return bound;
       };

实现一个promise

  1. 代码中有一地方应该是写错了
    // return new Promise((resolve, reject) => {
    return new MyPromise((resolve,reject)=>{
        callback = data => {
            resolve(data);
        };
    });
  1. 我对您的代码做了一些完善,自己测试么有问题,完善带代码如下:
export function MyPromise(executer) {
    this.state = "pending";
    this.onFulfilledCallback = [];
    this.onRejectedCallback = [];
    executer(
        data => {
            this.state = "resolved";
            this.value = data;
            this.onFulfilledCallback.forEach(callback => {
                callback(data);
            });
        },
        err => {
            this.state = "rejected";
            this.value = err;
            this.onRejectedCallback.forEach(callback => {
                callback(err);
            })
        }
    )
}

MyPromise.prototype.then = function (onSuccess, onFail) {
    let callback = null;
    let failCallback = null;
    if (this.state === 'resolved') {
        let newValue = onSuccess(this.value);
        callback(newValue)
    }
    if (this.state === 'pending') {
        this.onFulfilledCallback.push(res => {
            let newValue = onSuccess(res);
            callback(newValue)
        });
        this.onRejectedCallback.push(error => {
            let newError = onFail(error)
            failCallback(newError)
        })
    }
    if (this.state === 'rejected') {
        let newError = onFail(this.value)
        failCallback(newError)
    }
    return new MyPromise((resolve, reject) => {
        callback = data => {
            resolve(data);
        }
        failCallback = err => {
            reject(err);
        }
    })
}
  1. 测试代码如下:
new MyPromise(function (resolve, reject) {

    setTimeout(function () {
        reject('fail')
    }, 2000);

    setTimeout(function () {
        resolve('success')
    }, 3000);

}).then(success => {
    console.log(success);
    return success;
}, error => {
    console.log(error);
    return error;
}).then(success => {
    console.log('二次调用成功' + success)
}, error => {
    console.log('二次调用成功' + error)
})

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.