JSRUN 用代码说话
゛ Doubt
jsjcmq
JSRUN的第7753位用户
加入于 2018-02-28
上次活跃 2020-09-22



//程序运行完成时一定要有输出语句,本工具才能正确展示运行结果。 
console.log("Hello JSRUN!   \n\n         - from NodeJS .");

/***********************************************************
题目:
将一组区间中所有重叠的区间进行合并,例如 [起点,终点] 这种方式
输入:[[1,3],[2,6],[15,18],[8,10],[10,11],[7,8]]
输出:[[1,6],[15,18],[7,11]]

或 Excel 行列转 数字
例如: "A3" -> [1, 3], "Z10" -> [26, 10], "AZ2" -> [52, 2], "BA30" -> [53, 30]
二选一
************************************************************/
// 第一题
// 复杂度 O(n^2)
function fn1(arr) {
    // 利用reduce处理数组,total:已经存在区间,current:当前的区间
    return arr.reduce((total, current) => {
        let state = 0 // 是否存在于历史区间中,1存在,0不存在
        // 用当前的区间与已经存在的区间对比
        total.map(item => {
            const e = item.slice(0)
            if (current[0] <= e[1] && current[1] >= e[1]) {
                // 如果当前的区间左边界小于某个区间的右边,大于区间的左边,则扩大右区间
                item[1] = current[1]
                state = 1
            }
            if (current[1] <= e[1] && current[1] >= e[0]) {
                // 如果当前的区间右边界小于某个区间的右边,大于区间的左边,则扩大左区间
                item[0] = current[0]
                state = 1
            }
        })
        if (!state) total.push(current) // 如果没有历史区间,就加入到新的区间范围中
        return total
    }, [])
}
console.log(fn1([[1, 3], [2, 6], [15, 18], [8, 10], [10, 11], [7, 8]]))

// 第二题
function fn2(str) {
    let res1 = str.match(/[a-zA-Z]+/)
    let res2 = str.match(/\d+/)
    let num1 = 0
    let num2 = res2 ? res2[0] : 0
    if (res1) {
        let chatSize = 26
        let chat = res1[0].toLocaleUpperCase()
        let arr = chat.split('')
        let lens = arr.lens
        arr.map((e, i) => {
            let code = e.chartCodeAt() - 64
            num1 += code * Math.pow(chatSize * lens - i - 1)
        })
    }
    return [num1, num2]
}
console.log(fn2('"BA30'))
jsjcmq (゛ Doubt )- 2020-08-20 0 人
阿里面试题
jsjcmq (゛ Doubt )- 2020-08-06 0 人
利用 Proxy 包裹对象,使其读取不存在的变量时...
//程序运行完成时一定要有输出语句,本工具才能正确展示运行结果。 
console.log("Hello JSRUN!   \n\n         - from NodeJS .");

var getItem = localStorage.getItem.bind(localStorage)
var setItem = localStorage.setItem.bind(localStorage)
var removeItem = localStorage.removeItem.bind(localStorage)
localStorage.getItem = function (keyName) {
    var expires = getItem(keyName + '_expires')
    if (expires && new Date() > new Date(Number(expires))) {
        removeItem(keyName)
        removeItem(keyName + '_expires')
    }
    return getItem(keyName)
}
localStorage.setItem = function (keyName, keyValue, expires) {
    if (typeof expires !== 'undefined') {
        var expiresDate = new Date(expires).valueOf()
        setItem(keyName + '_expires', expiresDate)
    }
    return setItem(keyName, keyValue)
}

localStorage.setItem('key', 'value', new Date() + 1000) // 10 秒钟后过期
localStorage.getItem('key')
jsjcmq (゛ Doubt )- 2020-08-06 0 人
模拟 localStorage 时如何实现过期时间...
//程序运行完成时一定要有输出语句,本工具才能正确展示运行结果。 
console.log("Hello JSRUN!   \n\n         - from NodeJS .");

// 字符串仅由小写字母和 [] 组成,且字符串不会包含多余的空格。
// 示例一: 'abc' --> {value: 'abc'}
// 示例二:'[abc[bcd[def]]]' --> {value: 'abc', children: {value: 'bcd', children: {value: 'def'}}}

const normalize = (str) => {
    const result = {}
    str.match(/(?=\w)\w+/g).reduce((total,current,index,arr)=>{
        total.value = current
        if(index < arr.length -1) {
            return (total.children = {})
        }
    },result)
    return result
}

console.log(normalize('abc'))
console.log(normalize('[abc[bcd[def]]]'))
jsjcmq (゛ Doubt )- 2020-08-06 0 人
实现一个 normalize 函数,能将输入的特定...
//程序运行完成时一定要有输出语句,本工具才能正确展示运行结果。 
console.log("Hello JSRUN!   \n\n         - from NodeJS .");

async function asycnfunc() {
    let a = await Promise.resolve(1);
    let b = await Promise.resolve(2);
    let c = await Promise.resolve(3);
    return a + b + c;
}
// asyncfunc().then(res => console.log(res)

function* myGenerator() {
    let a = yield Promise.resolve(1);
    let b = yield Promise.resolve(2);
    let c = yield Promise.resolve(3);
    return a + b + c;
}
//期望:
run(myGenerator).then(res => console.log(res));

function run(fn) {
    return new Promise((resolve) => {
        function helper(g, num) {
            let result = g.next(num)
            if (!result.done) {
                result.value.then(data => {
                    helper(g, data)
                })
            } else {
                resolve(result.value)
            }
        }
        helper(fn())
    })  
}
jsjcmq (゛ Doubt )- 2020-08-01 0 人
实现Generator函数的run
//程序运行完成时一定要有输出语句,本工具才能正确展示运行结果。 
console.log("Hello JSRUN!   \n\n         - from NodeJS .");


function fn(str) {
    const re = /-(\w)/g
    return str.replace(re, function (s) {
        return s.substring(1).toUpperCase()
    })
}

console.log(fn('aaa-bbb-ccc'))
jsjcmq (゛ Doubt )- 2020-07-30 0 人
驼峰修改字符aaa-bbb-ccc
没有了
1/6 下一页