我用JavaScript创建了一个函数,它比较两个字符串并返回具有以下逻辑的相同字符的数量:
字符 1 = "aaabc" |字符 2 = "aakbc" ===> 我的函数返回 2
字符 2 = "88835" |字符 2 = "888vbr" ===> 我的函数返回 3
字符 1 ="A1234" |字符 2 = "B1234" ===> 我的函数返回 0
逻辑是,当函数发现 CHAR1 的第一个字符不同不等于 CHAR2 的第一个字符时,函数停止迭代并返回 0,如果不是:函数继续,直到我们发现 CHAR1(i) !== CHAR2(i)。
我正在使用这个函数来比较两个字符串数组,T[i] 和 V[j]。对于 T[i] 的每个值,我正在浏览所有 V[j] 并返回与 T[i] 更相似的行,如果函数找到相同的结果,我将返回最小值 V[j]。 这是我使用的代码:
function MyFunction(a, b) {
var n = a.length,
m = b.length;
var v;
var i = 1;
var j = 1;
if (a === b) {
v = a.length;
} else
if (a.charCodeAt(0) !== b.charCodeAt(0)) {
v = 0;
} else {
v = 1;
for (i = 1; i < n; i++) {
if (a.charCodeAt(i) == b.charCodeAt(i)) {
v++;
} else {
return v;
}
}
}
return v;
}
var t = ["350", "840", "35"],
v = ["3506", "35077", "84"],
i, j, f, l,
max,
result = [],
row = [];
for (i = 0; i < t.length; i++) {
max = MyFunction(v[0], t[i]);
l = v[0].length;
f = [
[t[0]],
[v[0]]
];
for (j = 1; j < v.length; j++) {
if (MyFunction(v[j], t[i]) > max) {
max = MyFunction(v[j], t[i]);
f = [
[t[i]],
[v[j]]
];
l = v[j].length;
} else {
if (MyFunction(v[j], t[i]) == max && l > v[j].length) {
max = MyFunction(v[j], t[i]);
f = [
[t[i]],
[v[j]]
];
l = v[j].length;
} else {
continue;
}
}
}
result.push(f);
console.log(f);
}
我的代码有问题,我得到的结果是:
[350][3506] (正确值)
[840][84] (正确值)
[350][3506] (错误值)
我没有找到这个问题的解决方案,我的代码不比较值 [35],代码正在比较第一个值 [350](这就是问题所在)。
在外部for
的每个循环中,您首先将max
初始化为MyFunction(v[0], t[i])
,然后扫描比较数组中的所有元素。 但是,在第三种情况下,此检查的 resault 大于另一个检查,因此此循环中的所有比较都false
,最终的 resault 就是您所看到的。
如果初始化max = 0
然后遍历从 0 开始的所有索引(包括),则可以解决它。