我有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次。无法理解我做错了什么以及如何解决它,你能帮助我吗?...
答案 0 :(得分:1)
您可以使用变量来控制它:
MyType
&#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]
)。
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;