function dN(num, len){ var d =0; return num.toString().replace(/-?0?\.0*/, "").replace(/\d/g, function(v, i, s){ return i-d >= len ?'' : (s.indexOf(v) < i ? (d++,'') : v); });}alert(dN(-0.303333351211745764444444444444444,5));
对我有用[0]
丢个板砖[0]
引用
举报
管理
TOP
osobo
(osobo)
等 级:
#14楼 得分:0回复于:2009-05-20 11:37:56
谢谢,最好这个执行效率有稍微提高;
对我有用[0]
丢个板砖[0]
引用
举报
管理
TOP
osobo
(osobo)
等 级:
#15楼 得分:0回复于:2009-05-20 11:40:11
数字串越长,后面这个效率提供更明显些;
主要还是希望能质的飞跃;如果能提供一倍,我的整个运算将解决5秒钟!!! 期待高手加入!
对我有用[0]
丢个板砖[0]
引用
举报
管理
TOP
s10275858
(小小宋)
等 级:
#16楼 得分:0回复于:2009-05-20 12:19:44
神奇的代码,学习了
对我有用[0]
丢个板砖[0]
引用
举报
管理
TOP
lfywy
(云中深海)
等 级:
#17楼 得分:0回复于:2009-05-20 12:48:43
学习
对我有用[0]
丢个板砖[0]
引用
举报
管理
TOP
dh20156
(风之石)
等 级:
#18楼 得分:10回复于:2009-05-20 13:29:39
试试看:
JScript code
<script type="text/javascript">var dN =function(num,len){ var s = num.toString().replace(/(?:^[^\d]*0*|[^\d])*/g,'').split('').reverse().join('').replace(/(\d)(?=.*\1)/g,'').split('').reverse(); s.length =len; return s.slice(0).join('');};alert(dN(-0.233641464278,4));alert(dN(-0.303545,3));alert(dN(33766545,4));</script>
对我有用[0]
丢个板砖[0]
引用
举报
管理
TOP
zswang
(伴水 清洁工 看帖要回贴)
等 级:
2
7
更多勋章
#19楼 得分:40回复于:2009-05-20 13:44:31
正则效率并不会比直接循环更快,只是开发效率快而已。正则自身也是需要循环来判断的。
试试这个:
JScript code
function dN(num, len){ num = num.toString().replace(/^0+|\D+/g, ""); var dict = {}; var result =0; for (var i =0; len >0&& i < num.length; i++) { var c = num.charAt(i); if (!dict[c]) { result *=10; result += parseInt(c); len--; dict[c] =true; } } return result.toString();}alert(dN("0.123153422", 6));
对我有用[0]
丢个板砖[0]
引用
举报
管理
TOP
zswang
(伴水 清洁工 看帖要回贴)
等 级:
2
7
更多勋章
#20楼 得分:0回复于:2009-05-20 13:51:50
num = num.toString().replace(/^0+(\.0+)?|\D+/g, "");
表现最好的是 Free_Wind22 ,执行时间为 1250ms;再次感谢你的2次改进。 function dN2(num, len){ var d = 0; return (num+'').replace(/-?0?\.0*/, "").replace(/\d/g, function(v, i, s){ return i-d > len ? '' : (s.substr(0, i).indexOf(v) >= 0 ? (d++,'') : v); }).substr(0, len); }
其次为dh20156,速度随变量的长度增大而变化明显。执行时间在 1550-2220之间;感谢;
var dN3 = function(num,len){ var s = num.toString().replace(/(?:^[^\d]*0*|[^\d])*/g,'').split('').reverse().join('').replace(/(\d)(?=.*\1)/g,'').split('').reverse(); s.length =len; return s.slice(0).join(''); };
再次为zswang ,执行时间为4500左右 function dN4(num, len){ num = num.toString().replace(/^0+|\D+/g, ""); var dict = {}; var result = 0; for (var i = 0; len > 0 && i < num.length; i++) { var c = num.charAt(i); if (!dict[c]) { result *= 10; result += parseInt(c); len--; dict[c] = true; } } return result.toString(); }
function dN(num, len){ var d =0; return num.toString().replace(/-?0?\.0*/, "").replace(/(\d)(?:\1)*/g, function(v, i){ return d==len?'':(++d,i); });};function dN(num, len){ var d =0; return num.toString().replace(/-?0?\.0*/, "").match(/(\d)(?!\1)+/g).slice(0,len).join("");};
对我有用[0]
丢个板砖[0]
引用
举报
管理
TOP
abiao5555
(abiao5555)
等 级:
#28楼 得分:0回复于:2012-03-01 01:24:36
JScript code
function dN(num, len){ return num.toString().replace(/-?0?\.0*/, "").match(/(?:\d)(?!\1)+/g).slice(0,len).join("");}