【问题标题】:How to compare a 1D vector with an element of a 2D array如何将一维向量与二维数组的元素进行比较
【发布时间】:2020-03-06 23:01:32
【问题描述】:

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

所以,我创建了一个 History 2D 数组,其中存储了所有新对。程序循环数组,将新对与历史数组的每一行进行比较。但是,我有一个麻烦:当比较的结果应该为真时(即,当 i == 1 时),我得到一个错误的结果。

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

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

我曾尝试与 == 和 === 运算符进行比较,这两种情况都没有成功。

我想我的错误是一些小错误,但我有几个小时尝试解决它但没有成功(我是 Javascript 的新手。)

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,2,3] === [1,2,3]。在比较对象时,===== 都会比较身份。
  • 旁注,您可以在现代 JS 中将此检查写为 if (!history.some(([a, b]) =&gt; a === numA &amp;&amp; b === numB)) history.push([numA, numB]);

标签: javascript arrays


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2017-10-22
    • 1970-01-01
    • 2018-06-28
    • 2013-05-19
    • 1970-01-01
    相关资源
    最近更新 更多