likes
comments
collection
share

分享几道题

作者站长头像
站长
· 阅读数 28

1,输入:“get1_install2_app3_list4_by5_android6”(每个单词后面总会携带一个数字,只有偶数才删掉),我不用循环只用正则怎么实现输出"get1InstallApp3ListBy5Android"?

let str = 'get1_install2_app3_list4_by5_android6'

const res = str.replace(/(\d)_?([a-z]){0,1}/g, (match, p1, p2) => {
    return `${p1 % 2 === 0 ? '' : p1}${p2 ? p2.toUpperCase() : ''}`;
});
//output: get1InstallApp3ListBy5Android
console.log(res)

2, 不能使用任何循环控制语句和迭代器的情况下实现一个0到1000的数组赋值

Array.from(new Array(1000), (val, index) => {
    return index;
});

3, 判断两个对象(注意特殊对象的处理)找出不一致的是哪个变量,返回的格式类似:"root变量-父变量-...-不一致的变量"的字符串;

const isObj = val => val && typeof val === 'object';
const isArr = arr => Array.isArray(arr);
const isNaN = Number.isNaN;

function compare(val1, val2) {

    let diff = '';
    
    if (isArr(val1) && isArr(val2)) {
        if (val1.length === val2.length) {
            for (let index = 0; index < val1.length; index++) {
                diff = compare(val1[index], val2[index]);
                if (diff) {
                    return `数组下标${index}-${diff}`;
                }
            }
            return;
        } else {
            return `数组长度不一致`;
        }
    }

    if (isNaN(val1) && isNaN(val2)) {
        return;
    }

    if ((typeof val1 === 'function' && typeof val2 === 'function') ||
        (val1 instanceof Date && val2 instanceof Date) ||
        (val1 instanceof RegExp && val2 instanceof RegExp) ||
        (val1 instanceof String && val2 instanceof String) ||
        (val1 instanceof Number && val2 instanceof Number)) {
        if (val1.toString() !== val2.toString()) {
            return `不一致的变量${val1}${val2}`;
        }
        return;
    }

    if (typeof val1 === 'object' && typeof val2 === 'object') {
        // mixin两个对象的key
        let mixinKeys = new Set([...Object.keys(val1), ...Object.keys(val2)]);
        for (let key of mixinKeys) {
            if (key in val1 && key in val2) {

                // console.log(val1[key])
                diff = compare(val1[key], val2[key]);
                if (diff) {
                    return `${key}-${diff}`;
                }
            } else {
                return `包含不同的key:${key}`;
            }
        }
        return;
    }

    if (val1 !== val2) {
        return `不一致的变量${val1}${val2}`;
    }
}

let obj1 = {
    name: 'ck',
    age: 18,
    arr: [1, 2, {
        ob: '3'
    }],
    child: {
        name: 'ck',
        age: '18',
        n: NaN,
        ch: [1, 'yyy', {
            date1: new Date(0),
            date2: new Date(0)
        }],
    },
}
let obj2 = {
    name: 'ck',
    age: 18,
    arr: [1, 2, {
        ob: '3'
    }],
    child: {
        name: 'ck',
        age: '18',
        n: NaN,
        ch: [1, 'yyy', {
            date1: new Date(0),
            date2: new Date(1995, 5, 20)
        }]
    },

}

//output: child-ch-数组下标2-date2-不一致的变量Thu Jan 01 1970 08:00:00 GMT+0800 (CST)和Tue Jun 20 1995 00:00:00 GMT+0800 (CST)
console.log(compare(obj1, obj2));
转载自:https://juejin.cn/post/6844904097347272711
评论
请登录