【发布时间】: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]) => a === numA && b === numB)) history.push([numA, numB]);
标签: javascript arrays