首页 > 解决方案 > 在大数据上调用 fromCharCode 的有效方法

问题描述

我所拥有的:一个由空格分隔的数字字符串。

我想要的:一个由fromCharCode应用于输入中的每个数字组成的字符串。

var str = "72 69 76 76 79" ;
var arr = str.split(" ") ;
var num = arr.map(Number) ;
var txt = num.map(function(value) { return String.fromCharCode(value); }) ;
return txt.join('') ;

这段代码有效,结果是 string HELLO,但在生产中的长度str将是数百万,所以我需要最有效的翻译。(注意:最后的分配行看起来有点奇怪。这是为了绕过TJ Crowder这个线程fromCharCode中很好地描述的一个怪癖。)

我没有看到任何关于初始的方法split,但我注意到连续两次map调用是否是要走的路。Number在显式循环中执行并fromCharCode一次翻译一个字符会更好吗?我认为 有一些开销foreach,但也许只运行一次数据是值得的。

我已经看到它fromCharCode接受逗号分隔的数字列表,但是我看不到如何在不引入比上面代码更多的遍历的情况下翻译我的整数数组。

我的 js 知识并没有超出 map 和显式循环的范围。有没有更现代或不那么天真的方法?最好我想要js香草。

标签: javascriptperformance

解决方案


“最快”的方法通常是需要对数据进行最少“更改”的方法。

也就是说,您的初始代码没有任何问题,除非我们正在谈论大量文本,或者代码需要经常执行,否则它应该不是问题。

如果您需要额外的性能,正则表达式可能是您的选择。您跳过初始化 Array 而不是两个映射操作(一个到数字,另一个返回到字符串),所有这些都可以通过单个回调处理:

function CodeToChar(str) {
  return str.replace(/\w+(\s|$)/igm, function replacePart(part) {
    return String.fromCharCode(parseInt(part, 10));
  })
}
console.log(
  CodeToChar("72 69 76 76 79")
)


推荐阅读