[前端经典题目]——字符串处理类(1)
1、美式计数法
题目描述
美式计数法是将一个数字 n ,从低位开始每三位一组,组之间用空格分隔的一种计数方式;例如 12345 按照美式计数方式为 12 345。
学会了美式计数方式后,小A想创建属于自己的计数方式—— A 式计数法;他想将数字 n ,从低位起,每A位数字一组,组之间用 " -" 分隔。例如 n = 12345, A = 2,因此按照式计数法则应该为 1-23-45;
现在给出 A 和 n,请你输出按照 A 式计数法的值。
代码
function Ashow(num, space) {
let str = String(num);
let len = str.length;
if (len <= space) {
return num;
}
let temp = "";
let count = 1;
for (let i = len - 1; i >= 0; i--) {
temp = str[i] + temp;
if (count % space === 0 && i > 0) {
temp = "-" + temp;
}
count++;
}
console.log(temp);
}
Ashow(123456, 2);
2、找出字符串中指定出现次数的字符
题目描述
输入一个字符串以及一个指定的次数,把符合条件的字符放入一个数组中,最后输出该数组。
例如:输入 str = “abaccdeff” ,num = 2,字符串 str 中次数为 2 的字符为 a、c、f,所以最后输出[‘a’,‘c’,‘f’]
代码
function countOfStr(str, num) {
let res = [];
if (str.length < num) {
return res;
}
// 整理 obj 格式为:{ a: 2, b: 1, c: 2, d: 1, e: 1, f: 2 }
let obj = str.split("").reduce((pre, cur) => {
if (cur in pre) {
pre[cur]++;
} else {
pre[cur] = 1;
}
return pre;
}, {});
//查找指定出现次数的字母
for (let i in obj) {
if (obj[i] === num) {
res.push(i);
}
}
return res;
}
let res = countOfStr("abaccdeff", 2);
console.log(res);
3、 解析 url 参数成对象
题目描述
现有一个函数 praseURIParam ,其功能是解析网站 url 地址,并返回一个 js 对象 urlObject.
例如输入:
let url = ‘http://www.hdlls.com/?user=candidate&id=43&id=99&city=%E5%B9%BF%E5%B7%9E&enabled’;
praseURIParam(url);
输出结果:
//结果,顺序不要求
{
user:‘candidate’,
id:[43,99], //重复出现的 key 要组装成数组,能被转成数字就转成数字类型
city:‘广州’, //中文需要解码
enabled:true, //未指定值的 key 约定为 true
}
代码
function praseURIParam(url) {
let urlObject = {};
//判断URL是否有查询串
if (url.lastIndexOf("?") == -1) {
return urlObject;
} else {
//根据 "?" 截取字符串并获取请求参数
let urlStr = url.split("?")[1];
//首先进行解码
urlStr = decodeURIComponent(urlStr);
let urlObject = urlStr.split("&").reduce((pre, cur) => {
// 解析成 [ 'user', 'candidate' ]
let item = cur.split("=");
let key = item[0],
value = item[1];
//重复出现的 key 处理
if (key in pre) {
if (!Array.isArray(pre[key])) {
pre[key] = [Number(pre[key]), Number(value)]; //如果重复的 key 不是数组,则转成数组
} else {
pre[key].push(Number(value));
}
} else if (value == undefined) {
pre[key] = true;
} else {
pre[key] = value;
}
return pre;
}, {});
console.log(urlObject);
}
}
let url =
"http://www.hdlls.com/?user=candidate&id=43&id=99&city=%E5%B9%BF%E5%B7%9E&enabled";
praseURIParam(url);