比较两个阵列是不工作的

时间:2017-05-13 12:52:48

标签: javascript arrays

我想检查“已检查”和“数字”中的相同数字。每个阵列中有六个数字,并且在阵列“相同”中输出等于一次。 即使阵列中有相同的数字,“相同”中也有0个元素。比较两个数组的代码是正确的(我之前测试过),但在这里它不会工作。 请帮忙 感谢

function getNumbers(){

    var boxes = document.forms[0];
    var checked = [];
    var i;
    for (i = 0; i < boxes.length; i++) {
        if (boxes[i].checked) {
            checked[checked.length] = boxes[i].value;
            }
        }
    if(checked.length != 6){alert("Pick 6");}
    else{
        document.getElementById("Ausgabe2").innerHTML = "You picked: "+checked;

    var numbers = [];
    var randomnumber;

    while(numbers.length < 6){
            randomnumber = Math.ceil(Math.random()*49)
            if(numbers.indexOf(randomnumber) > -1) continue;
            numbers[numbers.length] = randomnumber;
    }

    numbers.sort(sortNumber);

    document.getElementById("Ausgabe").innerHTML = numbers;

这里比较部分开始。如果我在这里再次声明'数字'和'检查'它可以工作,但我不想这样做。

    var same = [];
    for (i = 0; i < 6; i++) {
        if (numbers.indexOf(checked[i]) != -1) {
                same.push(checked[i]);
        }
    }

    document.getElementById("Ausgabe3").innerHTML = "You`ve got " + same.length + " right: " + same;    
    }
}

function sortNumber(a,b) {
        return a - b;
    }

2 个答案:

答案 0 :(得分:0)

这是因为每次在数组same中输入值时,都会以undefined(或0)的固定索引输入该值,具体取决于您如何初始化阵列)

&#13;
&#13;
// These declarations are only for this demo
var numbers = [0, 1, 2, 3, 4, 5, 6];
var checked = [3, 4, 5, 6, 7, 8, 9];
var same = [];

// Start of the snippet
// Replace the below part in your code
var len = (numbers.length < checked.legth) ? numbers.length : checked.length;

for (i = 0; i < len; i++) {
  if (numbers.includes(checked[i])) {
    same.push(checked[i]); // This line is where your code had a error
  }
}
// End of snippet

console.log('same array:');
console.log(same);
&#13;
&#13;
&#13;

编辑:

你理解JS阵列错了。您已在问题的更新代码段中多次使用以下循环

for (i = 0; i < boxes.length; i++) { // Iterate i from 0 till box.length
  if (boxes[i].checked) {
    checked[checked.length] = boxes[i].value; // For each value of i, the value of check.length is the same. So every time this condition is executed, you simply overwrite the value.
  }
}

尝试使用以下内容更新您的功能,我已更新了一些逻辑错误...

function getNumbers() {
  var boxes = document.forms[0];
  var checked = [];
  var i;
  for (i = 0; i < boxes.length; i++) {
    if (boxes[i].checked) {
      checked.push(boxes[i].value); // Updated here
    }
  }
  if (checked.length != 6) {
    alert("Pick 6");
  } else {
    document.getElementById("Ausgabe2").innerHTML = "You picked: " + checked;
    var numbers = [];
    var randomnumber;
    while (numbers.length < 6) {
      randomnumber = Math.ceil(Math.random() * 49)
      if (numbers.indexOf(randomnumber) > -1) continue;
      numbers.push(randomnumber); // Updated here
    }
    numbers.sort(sortNumber);
    document.getElementById("Ausgabe").innerHTML = numbers;
    var same = [];
    for (i = 0; i < 6; i++) {
      if (numbers.indexOf(checked[i]) != -1) {
        same.push(checked[i]);
      }
    }

    document.getElementById("Ausgabe3").innerHTML = "You`
    ve got " + same.length + "
    right: " + same;    
  }
}

答案 1 :(得分:0)

这是你在找什么?

&#13;
&#13;
"use strict"

var numbers = [1, 3, 5, 7, 9, 11];
var checked = [4, 5, 6, 7, 8, 9];
var same = [];

for (var i = 0; i < numbers.length; i++) {
  for (var j = 0; j < checked.length; j++) {
    if (numbers[i] === checked[j]) {
      same.push(numbers[i]);
    }
  } 
}

alert(same);
&#13;
&#13;
&#13;