Arrays includes()函数和数组比较的问题

Arrays includes()函数和数组比较的问题,arrays,include,comparison,Arrays,Include,Comparison,作为整个过程的一部分,我想比较用户输入(作为数组)和两个随机给定数组的并集。我不能使用array.sort()和逐元素比较数组,因为在输入数组中只有一个不同的元素就足够了,排序后,多个元素将被标识为“错误元素”(例如:排序后的数组“union”=[11,13,17,18],排序后的数组“upis”(用户输入)=[7,11,13,18]所以,如果我逐个元素进行比较,我在原始代码中尝试过,所有前三个元素都被标识为错误…) 这就是我切换到array.includes()的原因,我花了5.5个小时试图找

作为整个过程的一部分,我想比较用户输入(作为数组)和两个随机给定数组的并集。我不能使用array.sort()和逐元素比较数组,因为在输入数组中只有一个不同的元素就足够了,排序后,多个元素将被标识为“错误元素”(例如:排序后的数组“union”=[11,13,17,18],排序后的数组“upis”(用户输入)=[7,11,13,18]所以,如果我逐个元素进行比较,我在原始代码中尝试过,所有前三个元素都被标识为错误…)

这就是我切换到array.includes()的原因,我花了5.5个小时试图找出我错在哪里,但就是找不到,所以我有点疯了。。。再过几个小时我就应该去上班了,但我却因为这个失去了理智

问题出在checkInput()函数中…代码不会也不会识别“union”数组中的输入元素(数组“upis”)。。。不明白为什么

谢谢你的帮助

<script>
  //-----------  1.) Kreiraj dva nasumična niza i uniju  -----------
  var arrA = []; //od 3 do max 6 članova
  var arrB = []; //od 2 do max 5 članova
  while (arrA.length < Math.floor(Math.random() * 4) + 3) {
    var randomnumber = Math.floor(Math.random() * 20) + 1;
    if (arrA.indexOf(randomnumber) > -1) continue;
    arrA[arrA.length] = randomnumber;
  }
  while (arrB.length < Math.floor(Math.random() * 4) + 2) {
    var randomnumber = Math.floor(Math.random() * 20) + 1;
    if (arrB.indexOf(randomnumber) > -1) continue;
    arrB[arrB.length] = randomnumber;
  }
  var union = [...new Set([...arrA, ...arrB])];
  document.write("A = " + arrA + "<br>");
  document.write("B = " + arrB + "<br>");

  //-----------  2.) Funkcija za dodavanje text box-ova  -----------
  function addFields() {
    // Broj text box-ova koje treba kreirati
    var number = union.length;
    // <div> u koji će se dinamično dodati text box-ovi
    var container = document.getElementById("container");
    // Obriši prethodni zapis u <div>
    while (container.hasChildNodes()) {
      container.removeChild(container.lastChild);
    }
    // Tekst A U B
    //container.appendChild(document.createElement("br"));
    container.appendChild(document.createTextNode("A ∪ B = "));
    for (i = 0; i < number; i++) {
      // Kreiraj <input> element i definiraj stil
      var input = document.createElement("input");
      input.type = "text";
      input.id = "element" + i;
      input.style.width = 25;
      container.appendChild(input);
      // Dodaj zarez poslije svakog input box-a, osim posljednjeg
      if (i < number - 1) {
        container.appendChild(document.createTextNode(", "));
      }
    }
    // Pokaži gumb Provjeri
    document.getElementById("provj").style.visibility = "visible";
  }

  //-----------  3.) Provjera upisa  -----------
  function checkInput() {
    var upis = [];
    var greske = [];
    // Pohrani upis u niz
    for (i = 0; i < union.length; i++) {
      var privr = document.getElementById("element" + i).value;
      upis.push(privr);
    }

    for (i = 0; i < upis.length; i++) {
      // ako je neko polje nepopunjeno, obavijesti i prekini petlju
      if (upis[i] === "") {
        alert("Treba upisati sve članove unije skupova!");
        greske = [];
        //npr. prva dva upisa kriva, ostala polja nepopunjena - iako ima
        //praznih polja, prekida se procedura ali se kod prva dva upisa
        //popunio niz greške i onda će ih pokazati
        break;
      }
      // u protivnom
      else {
        var n = union.includes(upis[i]);
        alert(upis[i] + " " + n);
        if (n === false) {
          greske.push(upis[i]);
        } else {
          //ništa
        }
      }
    }
    if (greske.length > 0) {
      alert("Krivo upisani članovi: " + greske);
    }
  }

</script>

<div id="container">
  <button onclick="addFields()">Upiši članove unije</button>
</div>
<button id="provj" style="visibility:hidden" onclick="checkInput()">Provjeri</button>

//-----------1)克里拉·德瓦·纳苏米纳·尼扎一世-----------
var arrA=[]//外径3,最大直径6članova
var-arrB=[]//外径2度最大5č拉诺瓦
而(arrA.length-1)继续;
arrA[arrA.length]=随机数;
}
而(arrB.length-1)继续;
arrB[arrB.length]=随机数;
}
var union=[…新集合([…arrA,…arrB]);
文件。写入(“A=“+arrA+”
”; 文档。写入(“B=“+arrB+”
”; //-----------2.)Funkcija za dodavanje文本框ova----------- 函数addFields(){ //Broj文本框ova koje treba kreirati 变量编号=union.length; //u kojiće se dinamično dodati文本框ovi var container=document.getElementById(“容器”); //Obriši prethodni zapis u while(container.hasChildNodes()){ container.removeChild(container.lastChild); } //特克斯特A U B //container.appendChild(document.createElement(“br”)); container.appendChild(document.createTextNode(“A∪ B=“); 对于(i=0;i0){ 警报(“克里沃·乌皮萨尼·拉诺维:“+greske”); } } 乌皮什伊切拉诺夫大学 普罗夫杰里
您正在将数字与
字符串进行比较。只需将
+
添加到
includes
参数:

var n = union.includes(+upis[i]);
这将强制将字符串作为一个数字
取消装箱
,您的
includes
将按预期工作


您的另一个选择是将这些字符串转换为数字,然后不需要
取消装箱。

Akrion,您救了我一天!!!!愚蠢的我:-(为了寻找一个错误,我几乎花了整整一个晚上,我甚至没有想到这些是文本输入,而不是数字!!!!我真是太感谢你了!