分享几道题
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