【发布时间】:2020-07-21 18:07:27
【问题描述】:
当N 设置为125K 时,以下工作
let N = 125000
let x = [...Array(N)].map(( xx,i) => i)
let y = String.fromCodePoint(...x)
console.log(y.length)
当 N 设置为 128K 时,相同的代码会中断:
未捕获的 RangeError:超出最大调用堆栈大小
这是一个常见的操作:实现转换的最佳方式是什么?
请注意,我确实看过这个相关的问答。 https://stackoverflow.com/a/3195961/1056563 我们不应该依赖node.js,而且fromCharCode.apply 的方法也失败了。最后,这个答案已经有将近十年的历史了。
那么处理这种转换的最新高效方法是什么?
【问题讨论】:
-
有趣。避免使用
...(在对String.fromCodePoint的调用中?)可能会解决这个问题。也就是说,我怀疑它与传递太多参数有关:stackoverflow.com/a/22747272/2864740 -
哦!那是个很好的观点!随意回答。这不是一个真正的完整答案,但它指出了正确的方向,我会赞成
-
它仍然无法工作,因为 fromCodePoint 不采用数组 :( 只是试图真正隔离观察到的问题。更大的问题仍然存在:“如何 [有效地] 从一个非常大的代码点序列?”
-
是的,它不会 - 但是你意识到参数传递也不起作用是正确的。我正在寻找替代品
-
使用“call”而不是“...”会改变行为吗?这可能是一个实现细节,取决于此类代码如何在内部统一。
标签: javascript