手写题

127 阅读1分钟

1.url解析

// 解析一个任意url的所有参数为Object,注意边界条件的处理// {//     user: 'anonymous',//     id: [123, 456],//     city: '北京',//     enabled: true// }let url =  'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&enabled';parseParam(url);function parseParam(url) {    let obj    let fromUrl = url    let fromStr    let fromArr    let fromObj    let result = {}    let _key     let _val    let box    let oldVal    fromUrl = fromUrl.split("?")    fromStr = fromUrl[1]    fromArr = fromStr.split("&")    fromArr.forEach(function(item, index) {        box = item.split("=")        _key = box[0]        _val = box[1] || true        if(result[_key] && result[_key] instanceof Array) {            result[_key].push(_val)        } else if (result[_key]){            oldVal = Number(result[_key])            result[_key] = [oldVal]            result[_key].push(Number(_val))        } else {            result[_key] = decodeURI(_val)        }    })    console.log(result)}

2.模板引擎

let template = '我是{{name}}, 年龄{{age}},性别{{sex}}'let data = {    name: 'Emma',    age: 18}render(template, data)function render (template, data) {    let fromTemp = template;    let fromData = data;    let result    let tar    let index    let reg = /\{\{(\w*)\}\}/g;    let resultArr = fromTemp.match(reg)    let key     for(let i = 0; i < resultArr.length; i++) {        key = resultArr[i].slice(2, -2)        fromTemp = fromTemp.replace(resultArr[i], fromData[key])    }        console.log(fromTemp)}

3.字符串查找

function isContain(a, b) {    let aLen = a.length    let bLen = b.length    let aArr = a.split('')    let bArr = b.split('')    let result = -1    bArr.forEach(function(item, index) {        if(aArr[0] == item) {            result = index+1;            let n = index;            for(let i = 1; i < aLen; i++) {                n++                aArr[i] == bArr[n] && result != -2 ? result = index+1 : result = -2            }        } else {            rsult = -1        }    })    return result > 0 ? result : result = -1}let printRef = isContain('8', '12345678')console.log(printRef)

4.正则,逗号分割

//1234.56 => "1,234.56"function parseMoney(money) {    let reg = /(\d)(?=(\d{3})+\.)/g    let str = String(money)    let result = str.replace(reg, '$1,')    console.log(result)}parseMoney(12334565632.98)

5.数据绑定

 let obj = {     key_1: 1,     key_2: 2 } function bindData(tar, cb) {     let target = tar     let keyArr     keyArr = Object.keys(target)    for(let i = 0; i < keyArr.length; i++) {        let _key = keyArr[i]        let value = target[_key]        Object.defineProperty(target, _key, {            get: function() {                return value            },            set: function(newVal) {                if(value != newVal) {                    value = newVal                }                cb.call(target, _key)            }}        )     } } function func(key) {     console.log(key + '的值发生改变:' +this[key]) } bindData(obj, func) obj.key_1 = 2;

6.数据结构处理

let data = {    name: 'jake',    child: [        {name: 'jake 1'},        {name: 'jake 2', child: [            {name: 'jake 2-1', child: {name: 'jake 2-1-1'}},            {name: 'jake 2-2'}        ]},        {name: 'jake 3', child: {name: 'jake 3-1'}}    ]}function findMultiChildPerson(data) {    let result = []    let child = data.child    let parent = data.name    let cbResult    if(child && child instanceof Array) {        result.push(parent)        child.forEach(function(item, index) {            cbResult = findMultiChildPerson(item)            cbResult ?  result = result.concat(cbResult) : false        })    } else {        return    }        return result}// findMultiChildPerson(data) console.log(findMultiChildPerson(data))