如何将一维向量与二维数组的元素进行比较

时间:2019-11-11 09:02:15

标签: javascript arrays

在我的JavaScript小程序中,我必须检查a和b输入值:如果它们是新对,则该对将作为一维向量添加到小程序的历史记录中。

因此,我制作了一个History 2D数组,其中存储了所有新对。该程序循环比较新对和历史记录阵列的每一行的阵列。但是,我遇到了麻烦:当比较的结果应该为真时(即,当i == 1时),我得到的是错误的结果。

我阅读了以下基本页面: https://www.w3schools.com/js/js_arrays.asp 以及其他几个网页,没有找到造成我麻烦的原因。

此主题似乎在谈论另一个问题(但是,与我的问题有关): Convert a 2D JavaScript array to a 1D array

我曾尝试与==和===运算符进行比较,但两种情况均未成功。

我猜我的错误是一个小错误,但是我有几个小时试图解决它而没有成功(我是Java语言的新手。)

var history = [[1, 1], [1, 2]];
var numA = 1;
var numB = 2;
var currentPair = [numA, numB];
var isRepeatedPair = false;
var i = 0;

while ((i < history.length) && (isRepeatedPair == false)) {
    isRepeatedPair = (currentPair === history[i]);
    // alert("i= " + i + "\n" + "Current pair: " + currentPair + "\n" + "Pair in history: " + history[i]+ "\n" + "Is repeated pair? " + isRepeatedPair);
    i = i + 1;
}

history.push(currentPair);

当比较结果为真时(即,当i == 1时),我得到错误的结果。

(我已经使用以下命令对此进行了检查:

alert("i= " + i + "\n" + "Current pair: " + currentPair + "\n" + "Pair in history: " + history[i]+ "\n" + "Is repeated pair? " + isRepeatedPair);

在循环的每个步骤中;在MRE中此行被禁用。)

1 个答案:

答案 0 :(得分:1)

您可以使用其他名称history,因为这是window.history的保留变量。

然后更改循环并仅检查长度,如果发现重复项并设置标志isRepeatedPair,则退出循环。

检查必须比较每个元素,因为相等的数组在共享相同对象引用的情况下实际上是相同的。如果只有值,则需要检查这些值。

最后,再次检查标志,如果为false,则将实际的配对推入历史记录。

var historyX = [[1, 1], [1, 2]],
    numA = 1,
    numB = 2,
    currentPair = [numA, numB],
    isRepeatedPair = false,
    i = 0;

while (i < historyX.length) {
    if (currentPair[0] === historyX[i][0] && currentPair[1] === historyX[i][1]) {
        isRepeatedPair = true;
        break;
    }
    i++;
}

if (!isRepeatedPair) {
    historyX.push(currentPair);
}
  
console.log(historyX);