javascript String 字面量、replace、中文声母排序等

字符字面量

字面量含义
\n换行
\t制表
\b空格
\r回车
\f进纸
\\斜杠
\xnn以十六进制代码nn表示的一个字符(其中n为0-F)。例如:\x41 表示"A"
\unnnn以十六进制代码nnnn表示的一个Unicode字符(其中n为0-F)。例如,\u03a3 表示希腊字符Σ

转换为字符串

数值的toString方法可以传递参数,没有给定参数,默认是按照十进制

var num = 10;
alert(num.toString());//"10"
alert(num.toString(2));//"1010"
alert(num.toString(8));//"8"
alert(num.toString(16));//"a"

null 和undefined 没有toString方法,可使用转型函数String()替换

var a = null;
var b;
console.log(String(a));//"null"
console.log(String(b));//"undefined";

遍历字符串中某个字符的位置返回一个数组

var str = 'my name is menluyang ,i\'m a tiancai,the most handsome in the world!';
var arr = [];
var pos = str.indexOf('m');
while (pos>-1){
    arr.push(pos);
    pos = str.indexOf('m',pos+1);
}
console.log(arr);

replace()第二个参数传function的情况

var str = '<p class="hehe">Hello world!</p>'
function htmlEscape(str) {
    return str.replace(/[<>&"]/g,function (match, pos, originalText) {
        /**
         * match 匹配到的值
         * pos 匹配到的值的索引
         * originalText 要匹配的源整个字符串
         */
        switch (match){
            case "<":
                return "&lt";
            case ">":
                return "&gt";
            case "&":
                return "&amp";
            case "\"":
                return "&quot";
        }
    })
}
str = htmlEscape(str);
haha.innerHTML = str;

利用localeCompare()对字符串数组进行排序

var strArr = ['apple','orange','banana','pair'];
strArr.sort(function (str1,str2) {
    return str1.localeCompare(str2);
});
console.log(strArr);

根据汉字拼音声母排序 英文在汉字前面

let sortArr = ['twins', 'tcp', 't天cp', '天黑黑', '天空', '我怀念的', '我不爱', '我不难过', '张', '郑', '亿', '赢', 'tan'];

function listLoader(list) {
	// 23个带声母的英文
	let zhLetters = 'abcdefghjklmnopqrstwxyz'.split("");
	// 对应23个声母中文的分界字,网上查的,忘了是在哪里看到的了,这个人很厉害
	let zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split("");
	let letter26 = 'abcdefghijklmnopqrstuvwxyz'.split("");
	let segs = [];
	let comList = list.sort((a, b) => a.localeCompare(b));
	letter26.forEach((letter, i) => {
	let cur = { letter: letter.toUpperCase(), data: [] }
	list.forEach((item) => {
	  // 先把字母放到 data 中
	  if (letter26.includes(item[0].toLowerCase())) {
	    if (item[0].toLowerCase() === letter.toLowerCase()) {
	      cur.data.push(item);
	    }
	    return;
	  }
	  // 再把中文放到 data 中
	  let index = zhLetters.indexOf(letter);
	  if(index >= 0 && item.localeCompare(zh[index])>=0&&item.localeCompare(zh[index+1])<0){
	    cur.data.push(item)
	  }
	});
	// 排序
	if (cur.data.length) {
	  cur.data.sort(function(a, b) {
	  	// 'en-zh'  表示英文在中文前面,这个参数规则很繁琐,想要详细了解可查阅其他资料
	    return a.localeCompare(b, 'en-zh')
	  })
	  segs.push(cur);
	}
	})
	return segs
};
console.log(listLoader(sortArr));
/** 
 * 结果
 * [
 * 	{"letter":"T","data":["tan","tcp","twins","t天cp","天空","天黑黑"]},
 * 	{"letter":"W","data":["我不爱","我不难过","我怀念的"]},
 * 	{"letter":"Y","data":["亿","赢"]},
 * 	{"letter":"Z","data":["张","郑"]}
 * ]
 * /

fromCharCode() 和 chatCodeAt()

var str = '我们是共产主义接班人';
var strArr = str.split('');
var strCode = strArr.map(function (v) {
    return v.charCodeAt(0);
});
console.log(strCode);

var newStr = String.fromCharCode.apply(String,strCode);
console.log(newStr);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值