Maison interface Web js tutoriel 自己实现string的substring方法 人民币小写转大写,数字反转,正则优化_javascript技巧

自己实现string的substring方法 人民币小写转大写,数字反转,正则优化_javascript技巧

May 16, 2016 pm 05:50 PM

水平有限,不保证我的方案绝对正确,如有错误欢迎指出。

一、自己实现string的substring方法

方法一:用charAt取出截取部分

复制代码 代码如下:

String.prototype.mysubstring=function(beginIndex,endIndex){
var str=this,
newArr=[];
if(!endIndex){
endIndex=str.length;
}
for(var i=beginIndex;inewArr.push(str.charAt(i));
}
return newArr.join("");
}

//test
"Hello world!".mysubstring(3);//"lo world!"
"Hello world!".mysubstring(3,7);//"lo w"

方法二:把字符串转换成数组然后取出需要部分
复制代码 代码如下:

String.prototype.mysubstring=function(beginIndex,endIndex){
var str=this,
strArr=str.split("");
if(!endIndex){
endIndex=str.length;
}
return strArr.slice(beginIndex,endIndex).join("");
}

//test
console.log("Hello world!".mysubstring(3));//"lo world!"
console.log("Hello world!".mysubstring(3,7));//"lo w"

方法三:取出头尾部分,然后用replace去掉多余部分,适用于beginIndex较小,字符串长度-endIndex较小的情况
复制代码 代码如下:

String.prototype.mysubstring=function(beginIndex,endIndex){
var str=this,
beginArr=[],
endArr=[];
if(!endIndex){
endIndex=str.length;
}
for(var i=0;ibeginArr.push(str.charAt(i));
}
for(var i=endIndex;iendArr.push(str.charAt(i));
}
return str.replace(beginArr.join(""),"").replace(endArr.join(""),"");
}

//test
console.log("Hello world!".mysubstring(3));//"lo world!"
console.log("Hello world!".mysubstring(3,7));//"lo w"

二、一万亿以内的人民币小写转大写,暂不考虑连续零的处理
方法一(七行代码实现):
复制代码 代码如下:

function moneyCaseConvert(num){
var upperArr=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],
levelArr=["","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万"],
numArr=num.toString().split("").reverse(),
result=[];
for(var i=numArr.length-1;i>=0;i--)
result.push(upperArr[numArr[i]]+levelArr[i]);
return result.join("");
}

//Test
console.log(CaseConversion(1234567891234));
//壹万贰仟叁佰肆拾伍亿陆仟柒佰捌拾玖万壹仟贰佰叁拾肆

console.log(CaseConversion(987654321));
//玖亿捌仟柒佰陆拾伍万肆仟叁佰贰拾壹

console.log(CaseConversion(1234));
//壹仟贰佰叁拾肆

三、数字反转,输入123返回321
方法一:
复制代码 代码如下:

function numReverse(num){
return parseInt(num.toString().split("").reverse().join(""));
}
//Test
console.log(numReverse(123456));
//654321

方法二:
复制代码 代码如下:

function numReverse(num){
var numArr=num.toString().split(""),
len=numArr.length,
result=0;
for(var i=len-1;i>=0;i--){
result+=numArr[i]*Math.pow(10,i);
}
return result;
}

//Test
console.log(numReverse(123456));
//654321

四、JSONP原理,与Ajax的关系
  JSONP原理是利用了script标签动态解析JS的特性,通过动态添加<script>标签来调用服务器提供的js脚本,达到跨域调用的目地。关于JSONP更多信息可以参考这篇文章:<A href="http://www.jb51.net/article/31167.htm" target=_blank>http://www.jb51.net/article/31167.htm。 <br><br>  JSONP与AJAX看起来有点像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,但JSONP与AJAX是两个不同的东西,这两者之间可以说没什么关系。 <br><br><STRONG>五、正则表达式优化 <br><br>  正则表达式的优化总的来说就是尽可能精确,减少回溯次数,具体来说主要是以下几点: <br><br>1.如果你的正则工具支持,在不需要引用括号内文本的时候使用非捕获型括号:(?:expression) 。 <BR>2.如果括号是非必须的,请不要加括号。 <BR>3.不要滥用字符数组,比如[.],请直接用\. 。 <BR>4.使用锚点^ $ ,这会加速定位。 <BR>5.从两次中提取必须元素,如:x+写成xx*,a{2,4}写成aa{0,2}。 <BR>6.提取多选结构开头的相同字符,如the|this 改成th(?:e|is)。(如果你的正则引擎不支持这么使用就改成th(e|is));尤其是锚点,一定要独立出来,这样很多正则编译器会根据锚点进行特别的优化: ^123|^abc 改成^(?:123|abc)。同样的$也尽量独立出来。 <BR>7.多选结构后边的一个表达式放入多选结构内,这样能够在匹配任何一个多选结构的时候在不退出多选结构的状态下查看后一匹配,匹配失败的更快。这种优化需要谨慎使用。 <BR>8.忽略优先匹配和优先匹配需要你视情况而定。如果你不确定,请使用匹配优先,它的速度是比忽略优先快的。 <BR>9.拆分较大正则表达式成一个个小的正则表达式,这是非常有利于提高效率的。 <BR>10.模拟锚点,使用合适的环视结构来预测合适的开始匹配位置,如匹配十二个月份,可以先预查首字符是否匹配:(?=JFMASOND)(?:Jan|Feb|…|Dec)。这种优化请根据实际情况使用,有时候环视结构开销可能更大。 <BR>  注:以上几点节选自<A href="http://www.jb51.net/article/31168.htm" target=_blank>http://www.jb51.net/article/31168.htm,非常好的一篇正则表达式优化文章,推荐有兴趣的朋友看原文。 <br><br><STRONG>六、visibility:hidden与 display:none 的区别 <BR>  区别主要有三点: <br><br>  1、空间占据:元素设置为visibility:hidden后仍然占据物理空间,而元素设置为display:none后是不占据空间的。 <br><br>  2、性能:visibility:hidden因为仍然占据物理空间,所以不会引起页面的回流和重绘,所以性能更好,反之display:none会引起页面回流和重绘。 <br><br>  3、继承性:当父元素设置为display:none后所有子元素均会被引藏,不改变父元素可见性的情况下子元素没有办法显示出来,如果父元素设置为visibility:hidden,所有子元素也会不可见,但如果给子元素设置为visibility:visible的话,子元素就可以重见天日了。 <br><br><STRONG>七、篇历DOM树 <br><br>方法一:用nextSibling和childNodes <BR><div class="codetitle"><span><a style="CURSOR: pointer" data="89225" class="copybut" id="copybut89225" onclick="doCopy('code89225')"><U>复制代码 代码如下:<div class="codebody" id="code89225"> <BR>function traversalByNextSibling(obj){ <BR>var ch=obj.firstChild, <BR>result=[]; <BR>do{ <BR>result.push(ch.nodeName); <BR>if(ch.childNodes.length){ <BR>result.push.apply(result,traversalByNextSibling(ch)); <BR>} <BR>}while(ch=ch.nextSibling); <BR>return result; <BR>} <BR> <BR>方法二:用childNodes <BR><div class="codetitle"><span><a style="CURSOR: pointer" data="9115" class="copybut" id="copybut9115" onclick="doCopy('code9115')"><U>复制代码 代码如下:<div class="codebody" id="code9115"> <BR>function traversalByChildNodes(obj){ <BR>var ch=obj.childNodes, <BR>result=[]; <BR>for(var i=0,j=ch.length;i<j;i++){ <BR>result.push(ch[i].nodeName); <BR>if(ch[i].childNodes.length){ <BR>result.push.apply(result,traversalByChildNodes(ch[i])); <BR>} <BR>} <BR>return result; <BR>} <BR> <BR>测试: <BR><div class="codetitle"><span><a style="CURSOR: pointer" data="76003" class="copybut" id="copybut76003" onclick="doCopy('code76003')"><U>复制代码 代码如下:<div class="codebody" id="code76003"> <BR><!DOCTYPE html> <BR><html> <BR><head> <BR><meta charset="utf-8"> <BR><title>Demo <BR><style type="text/css"> <br><br> <BR> <BR><body> <BR><div id="test">Test <BR><div>Hello World <BR><p>PTest <BR><script> <BR>console.log(traversalByNextSibling(document)); <BR>//IE6-8: #comment,HTML,HEAD,TITLE,META,STYLE,BODY,DIV,#text,DIV,#text,P,#text,SCRIPT <BR>//other:["html", "HTML", "HEAD", "#text", "META", "#text", "TITLE", "#text", "#text", "STYLE", "#text", "#text", "#text", "BODY", "#text", "DIV", "#text", "#text", "DIV", "#text", "#text", "P", "#text", "#text", "SCRIPT", "#text"] <br><br>console.log(traversalByChildNodes(document)); <BR>//IE6-8: #comment,HTML,HEAD,TITLE,META,STYLE,BODY,DIV,#text,DIV,#text,P,#text,SCRIPT <BR>//otehr:["html", "HTML", "HEAD", "#text", "META", "#text", "TITLE", "#text", "#text", "STYLE", "#text", "#text", "#text", "BODY", "#text", "DIV", "#text", "#text", "DIV", "#text", "#text", "P", "#text", "#text", "SCRIPT", "#text"] <BR></script>
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Remplacer les caractères de chaîne en javascript Remplacer les caractères de chaîne en javascript Mar 11, 2025 am 12:07 AM

Remplacer les caractères de chaîne en javascript

Tutoriel de configuration de l'API de recherche Google personnalisé Tutoriel de configuration de l'API de recherche Google personnalisé Mar 04, 2025 am 01:06 AM

Tutoriel de configuration de l'API de recherche Google personnalisé

Exemple Couleurs Fichier JSON Exemple Couleurs Fichier JSON Mar 03, 2025 am 12:35 AM

Exemple Couleurs Fichier JSON

8 Superbes plugins de mise en page JQuery Page 8 Superbes plugins de mise en page JQuery Page Mar 06, 2025 am 12:48 AM

8 Superbes plugins de mise en page JQuery Page

Créez vos propres applications Web Ajax Créez vos propres applications Web Ajax Mar 09, 2025 am 12:11 AM

Créez vos propres applications Web Ajax

Qu'est-ce que & # x27; ceci & # x27; en javascript? Qu'est-ce que & # x27; ceci & # x27; en javascript? Mar 04, 2025 am 01:15 AM

Qu'est-ce que & # x27; ceci & # x27; en javascript?

Améliorez vos connaissances jQuery avec le spectateur source Améliorez vos connaissances jQuery avec le spectateur source Mar 05, 2025 am 12:54 AM

Améliorez vos connaissances jQuery avec le spectateur source

10 feuilles de triche mobiles pour le développement mobile 10 feuilles de triche mobiles pour le développement mobile Mar 05, 2025 am 12:43 AM

10 feuilles de triche mobiles pour le développement mobile

See all articles