循环思考项目并通过逐字母比较来存储结果

时间:2017-06-23 10:06:07

标签: javascript typescript

我有2个D阵列,想要将数组a中的每个单词与数组b中的每个单词逐字母进行比较。

让我们说

a = [['letter'], ['yellow'], ['planet'], ['blue'], ['sun']]
b = [['letter'], ['yellow'], ['planet'], ['blur'], ['son']]

console.log(this.a[0][0]); // first word first letter
console.log(this.b[0][0]); // first word first letter


for (let i = 0; i < this.b.length; i++) { // 5 words
  for (let j = 0; j < 6; j++) { // 6 letter max
    if (this.a[i][j] === this.b[i][j]) {
     console.log('ok', i, j, this.a[i][j], this.b[i][j]);

    } else {
     console.log('hmm');
    }
  }
}

它比较正确,但它每次都会发出警告,当来自a的字母来自b时,我想要从a =来自b的单词发出警告,因此最大警报5次。无法理解我做错了什么以及如何解决它,你能帮助我吗?...

3 个答案:

答案 0 :(得分:1)

您可以使用变量来控制它:

&#13;
&#13;
MyType
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以将条件移动到外部循环并计算匹配的字母数。

for (let i = 0; i < this.b.length; i++) { // 5 words
    let matchedLetters = 0;

    for (let j = 0; j < this.b[i].length; j++) { // 6 letter max
        if (this.a[i][j] === this.b[i][j]) {
            matchedLetters++;
        }
    }

    if (matchedLetters === this.a.length) {
        alert('ok');
    } else {
        alert('hmm');
    }
}

在循环条件中注意索引。我将j < 6替换为j < this.b[i].length(这不是很干净),因为仅仅比较j < 6会给您一个索引错误。

答案 2 :(得分:0)

我会尝试以下内容。我还修改了代码,以便能够处理任意长度的单词。我认为你有一个特殊的理由来比较字符方面的字样(因为你也可以使用a[i] === b[i])。

&#13;
&#13;
a = ['letter', 'yellow', 'planet', 'blue', 'sun'];
b = ['letter', 'yellow', 'planet', 'blue', 'sun'];

for (let i = 0; i < this.b.length; i++) { // 5 words
  let j = 0;
  // longest word (in case it differs)
  const max = this.a[i].length > this.b[i].length 
    ? this.a[i].length 
    : this.b[i].length;
  
  // increment j as long as a[i][j] and b[i][j] are equal
  for (; this.a[i][j] === this.b[i][j] && j < max; j++);

  if (j === max) {
    console.log('ok');
  } else {
    console.log('hmmm');
  }
}
&#13;
&#13;
&#13;