[前端经典题目]——字符串处理类(1)

[前端经典题目]——字符串处理类(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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值