面试中遇到的笔试题,记录一下~
题目:
1.写一个方法,统计字符串中出现的字母及出现次数。
比如:入参abcAAAabc
返回:a:2,b:2,c:2,A:3(示形式不限,但是结果中要能清晰感知出现字母及出现的次数)
const str = 'abcAAAabc';
let countObj = {}; // 用来统计字符串中出现的字母及次数
// 循环字符串
for (let i = 0; i < str.length; i++) {
// 将字符串中出现的字母设置为countObj的key名
let key = str[i];
// 将字符串中出现的字符(即字母)和字符出现次数存入countObj中
if (countObj[key]) {
countObj[key]++;
} else {
countObj[key] = 1;
}
}
console.log('countObj:', countObj); // countObj:{a: 2, b: 2, c: 2, A: 3}
// 输出统计的字母及出现次数
for (const key in countObj) {
console.log(`字母${key}-出现${countObj[key]}次`);
}
2./**
* 说明:计算多个区间的交集。
* 区间应长度为2的数组数组表示,如[2, 5]表示区间2到5(包括2到5);
* 区间不限定方向,如[5, 2]等同与[2, 5];
* 实现`getIntersection`,可接收多个区间,并返回所有区间的交集(用区间表示),如空集用null表示
* 示例:
* getIntersection([5, 2], [4, 9], [3, 6]); // [4, 5]
* getIntersection([1, 7], [8, 9]); // null
*/
function getIntersection(...args) { // 剩余运算符 [[5, 2], [4, 9], [3, 6]]
let fArr = []; // 存储所有输入数组的第一位数字,输出新的数组
let lArr = []; // 存储所有输入数组的第二位数字,输出新的数组
// 遍历输入数组
for(let item of args) {
item.sort((a,b)=>{ return a-b }) // 将输入数组排序,数组第一个数小于数组第二个数
fArr.push(item[0]) // 将第一个下标放到数组fArr中
lArr.push(item[1]) // 将第二个下标放到数组lArr中
}
console.log('fArr:', fArr); // [2, 4, 3]
console.log('lArr:', lArr); // [5, 9, 6]
let fMax = Math.max(...fArr); // 选出第一个下标比较大的值
let lMin = Math.min(...lArr); // 选出第二个下标比较小的值
console.log('fMax:', fMax); // 4
console.log('lMin:', lMin); // 5
if(fMax > lMin) { // 如果第一个数字大于第二个数字,无交集
return null;
} else if(fMax === lMin) { // 如果第一个数字等于第二个数字,交集为当前值
return fMax;
} else {
return [fMax,lMin]; // 有交集情况
}
}
console.log(getIntersection([5, 2], [4, 9], [3, 6])); // [4, 5]
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 阿里web前端面试-笔试题
发表评论 取消回复