对于客户端搜索工具,我需要找到一个单词的Levenshtein距离以及数百万个其他单词.用户应该能够将大约二十个单词的短文与一本书进行比较.用户可以通过查找书中文本的最具特征的单词的位置来做到这一点."寻找位置"并不意味着寻找完全匹配,但几乎与levenshtein匹配.我从已经可用的实现开始,但我需要更快的速度.我最终得到了这个:
var rowA = new Uint16Array(1e6);
var rowB = new Uint16Array(1e6);
function levenshtein(s1, s2) {
var s1_len = s1.length, s2_len = s2.length, i1, i2 = 0, a, b, c, c2, i = 0;
if (s1_len === 0)
return s2_len;
if (s2_len === 0)
return s1_len;
while (i < s1_len)
rowA[i] = ++i;
while (i2 < s2_len) {
c2 = s2[i2];
a = i2;
++i2;
b = i2;
for (i1 = 0; i1 < s1_len; ++i1) {
c = a + …Run Code Online (Sandbox Code Playgroud) 我想将两个 BigInt 数字相除并得到一些有效数字和指数的结果。到目前为止我已经得到了这个:
f = (numerator, denominator, significantsLength) => {
const denominatorLength = ('' + denominator).length
const extension = significantsLength + denominatorLength
const extendedNumerator = numerator * 10n ** BigInt(extension)
const div = extendedNumerator / denominator
const divLength = ('' + div).length
const digitsSurplus = divLength - significantsLength
const significants = div / 10n ** BigInt(digitsSurplus)
const exponent = digitsSurplus - extension
return significants + 'e' + exponent
}
Run Code Online (Sandbox Code Playgroud)
所以f(1n,3n,3)结果是'333e-3'
还能更好吗?此代码不进行四舍五入。它也不适用于零和负数。
如果我在Firefox上运行以下代码,我会收到一个错误:
new Number.toString;
Run Code Online (Sandbox Code Playgroud)
但根据MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence new Number应首先进行评估.所以表格我认为不正确.
我们来看看MSDN:http://msdn.microsoft.com/en-us/library/z3ks45k7(v = vs.94).aspx.在表格上方写道,操作员从左到右进行评估.但:
a=1;
b=a=2;
Run Code Online (Sandbox Code Playgroud)
现在b具有值2,表示从右到左的评估.所以这个优先表也不正确.
谁能给我一张正确的桌子?
我正在寻找Javascript中的通用Levenshtein实现。它必须快速并且对短字符串和长字符串有用。它也应该多次使用(因此进行缓存)。最重要的是,它计算出一个简单的Levenshtein距离。我想出了这个:
var levenshtein = (function() {
var row2 = [];
return function(s1, s2) {
if (s1 === s2) {
return 0;
} else {
var s1_len = s1.length, s2_len = s2.length;
if (s1_len && s2_len) {
var i1 = 0, i2 = 0, a, b, c, c2, row = row2;
while (i1 < s1_len)
row[i1] = ++i1;
while (i2 < s2_len) {
c2 = s2.charCodeAt(i2);
a = i2;
++i2;
b = i2;
for (i1 = 0; i1 < s1_len; ++i1) …Run Code Online (Sandbox Code Playgroud) 在反应组件中,我正在导入一些第三方模块和其他模块。有没有办法 Webstorm、Prettier、Eslint 或其他东西会检查甚至格式化第三方导入和其他导入之间的空行?
我已经找到了如何对导入进行排序,以便将第三方导入放在首位。
我找到了我的答案。现在如何在脚本和资产导入之间插入换行符?
我还没有发现任何关于 Javascript 中的虚假值的讨论或文章,其中在我看到!!-0yielding 时提到了负零false。这是为什么?
更新:我觉得现在大部分作者总结falsy值不知道或者-0是一个值或平均值0都+0和-0。
javascript ×6
algorithm ×1
bigint ×1
ecmascript-6 ×1
eslint ×1
formatting ×1
import ×1
operators ×1
zero ×1