Arrays includes()函数和数组比较的问题
作为整个过程的一部分,我想比较用户输入(作为数组)和两个随机给定数组的并集。我不能使用array.sort()和逐元素比较数组,因为在输入数组中只有一个不同的元素就足够了,排序后,多个元素将被标识为“错误元素”(例如:排序后的数组“union”=[11,13,17,18],排序后的数组“upis”(用户输入)=[7,11,13,18]所以,如果我逐个元素进行比较,我在原始代码中尝试过,所有前三个元素都被标识为错误…) 这就是我切换到array.includes()的原因,我花了5.5个小时试图找出我错在哪里,但就是找不到,所以我有点疯了。。。再过几个小时我就应该去上班了,但我却因为这个失去了理智 问题出在checkInput()函数中…代码不会也不会识别“union”数组中的输入元素(数组“upis”)。。。不明白为什么 谢谢你的帮助Arrays includes()函数和数组比较的问题,arrays,include,comparison,Arrays,Include,Comparison,作为整个过程的一部分,我想比较用户输入(作为数组)和两个随机给定数组的并集。我不能使用array.sort()和逐元素比较数组,因为在输入数组中只有一个不同的元素就足够了,排序后,多个元素将被标识为“错误元素”(例如:排序后的数组“union”=[11,13,17,18],排序后的数组“upis”(用户输入)=[7,11,13,18]所以,如果我逐个元素进行比较,我在原始代码中尝试过,所有前三个元素都被标识为错误…) 这就是我切换到array.includes()的原因,我花了5.5个小时试图找
<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,您救了我一天!!!!愚蠢的我:-(为了寻找一个错误,我几乎花了整整一个晚上,我甚至没有想到这些是文本输入,而不是数字!!!!我真是太感谢你了!