2014-11-08 12:18:51 更新,修复原形链方法被当作关键词的bug,其实之前是想用全局关键词的,不过还是算了,array里有太多单词了。
                                现在 length callee 关键词依然会被输出,以后修复,现在为了精简就将就着用了。
2014-08-26 14:55:30 更新,修复 #5楼 冲动 兄弟提出的问题。

其实我根本不会 C# 只是看到人家写了个这种功能《js实现类似c#中的字符串处理方法format()
我看了下代码,觉得思路繁琐,所以简化思路写一个一样的功能的方法,和大家分享下思路。

先来看下代码吧。

String.prototype.format = function(args) {
var _dic = typeof args === "object" ? args : arguments;
return this.replace(/\{([^{}]+)\}/g, function(str, key) {
// return key in _dic ? _dic[key] : str;
return _dic.hasOwnProperty(key) ? _dic[key] : str;
});
} var str = "参数{0}参数{1}参数{2}参数{3}参数{hehe}参数{{fuck}}参数{ooxx}";
console.log( str.format("001", "002") ); // 参数001参数002参数{3}参数{hehe}参数{{fuck}}参数{ooxx}
console.log( str.format(["001", "002"]) ); // 参数001参数002参数{3}参数{hehe}参数{{fuck}}参数{ooxx}
console.log( str.format([null, "", undefined, 1]) ); // 参数null参数参数undefined参数1参数{hehe}参数{{fuck}}参数{ooxx} console.log( str.format({hehe: "呵呵", fuck: "法克"}) ); // 参数{0}参数{1}参数{3}参数呵呵参数{法克}参数{ooxx}
console.log( str.format({"1":"111", hehe: "呵呵", ooxx: "哈哈"}) ); // 参数{0}参数111参数{3}参数呵呵参数{{fuck}}参数哈哈
console.log( str.format({"1":undefined, hehe: null, ooxx: ""}) ); // 参数{0}参数undefined参数{2}参数{3}参数null参数{{fuck}}参数

代码简洁易懂,维护起来也很轻松,而且支持 3 种格式的参数替换。
但是也不是无懈可击的,因为我的思路和原文完全相反。

思路是这样的,利用正则匹配出字符串内所有 {key} 这样的格式字符,然后把 key 当作对象对应的key或者数组对应的下标进行替换。
第一行  var _dic = typeof args === "object" ? args : arguments;  可以接受 3 种格式的数据。
多参数: arguments
数组: []
对象: {}
把这3种数据当作字典保存在 _dic 变量里。

下面正则替换替换函数里,其实就是进行查字典操作。
 return key in _dic ? _dic[key] : str; 
如果 _dic[key] 对应数据存在,就替换,否则就返回原始数据。
因为 arguments, [], {} 都可以当作字典来处理,所以就可用最简单方法实现这种效果了。

同时缺陷也非常明确的暴露了,就是如果字符串里 {key} 这种参数非常多,但是替换的数据却很少的时候,性能肯定不如他的方法。
但我觉得一般操作肯定都是参数对应进行替换的,这样性能损耗就不用担心了,因为对应了参数,损耗就是0。
反而比他那个多次正则替换来的快呢。

最新文章

  1. rhel 7.0, windows10双系统grub2设置
  2. (转)yarn 集群部署,遇到的问题小结
  3. Docker 安装jupyter notebook
  4. List容器
  5. 转:CSS圆角详解
  6. 这是一名Java学者关于学习方向的建议
  7. delete操作字符串会报错吗?
  8. 新概念英语(1-5)Nice to meet you.
  9. vue.js实战——计算属性
  10. 关于cin的缓存区影响效果
  11. WC、KOI2017小随想..
  12. idea当配置eclipse快捷键时,全局替换的快捷键是什么?
  13. override overload reintroduce的区别(delphi)
  14. Linux服务器性能评估
  15. pytorch中检测分割模型中图像预处理探究
  16. (转)Ctrl+H 浪潮Raid配置文档
  17. shell 编程每日100行
  18. selenium自动化测试之整合测试报告
  19. win Server 2008 笔记
  20. OpenGL(3)-三角形

热门文章

  1. 【模拟】Codeforces 711B Chris and Magic Square
  2. DateDiff 函数,用生日获得年龄
  3. HDU4003 Find Metal Mineral
  4. SQL条件表达式
  5. Change ugly fonts in Firefox (KDE)
  6. zoj 3365 灵活数字规律
  7. c语言:蜗牛的爬行。
  8. Java菜鸟学习笔记--Exception篇(一):异常简介
  9. rsync是类unix系统下的数据镜像备份工具
  10. Android WindowManager的使用