【问题标题】:JavaScript array string compareJavaScript 数组字符串比较
【发布时间】:2018-01-15 10:34:15
【问题描述】:

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

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

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

字符 1 = “A1234” | Char 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](这是问题所在)。

【问题讨论】:

  • “错误值”信息不足。您期望什么价值?与此相反,您得到了什么?
  • 我应该得到:[35] [3506]
  • @Fildor 他希望他的函数为t 中的每个项目提供一个结果,而“35”缺失,他得到“350”的双倍结果
  • function MyFunction(a,b) {for( var i=0, l=Math.min(a.length,b.length); i&lt;l; i++) {if(a[i] !== b[i]) {return i;}} return l;} 工作完成。
  • @Kaddath 是的,现在我正在阅读它。将其误解为“该函数为 [350][3506] 提供了错误的结果”... thx

标签: javascript arrays compare


【解决方案1】:

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

如果你初始化 max = 0 然后循环从 0(包括)开始的所有索引,你可以解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    相关资源
    最近更新 更多