JavaScript数组字符串比较

时间:2018-01-15 10:34:16

标签: javascript arrays compare

我使用JavaScript创建了一个函数,它比较两个字符串并使用以下逻辑返回相同字符的数量:

  

Char 1 =“aaabc”|字符2 =“aakbc”===>我的函数返回2

     

Char 2 =“88835”|字符2 =“888vbr”===>我的函数返回3

     

Char 1 =“A1234”|字符2 =“B1234”===>我的函数返回0

逻辑是,当函数发现CHAR1的FIRST字符不同时,CHARAL比CHAR2的FIRST字符不等,函数停止迭代并返回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](这就是问题)。

1 个答案:

答案 0 :(得分:1)

在外部for的每个循环中,您首先将max初始化为MyFunction(v[0], t[i]),然后扫描比较数组中的所有元素。但是,在第三种情况下,此检查的重新检查大于另一种检查,因此此循环中的所有比较都得到false,最后的重新检索就是您所看到的。

如果初始化max = 0然后循环遍历0(包括)中的所有索引,则可以解决此问题。