Javascript错误检测数组中的项目

时间:2018-05-30 02:26:11

标签: javascript

我正在使用javascript打扫扫雷游戏。导致我麻烦的机制是Mine对象内部的for循环,它将isBomb变量设置为true或false。

var board = [];
var bombs = [];
var mines;

function findNeighbors(x,y) {
    return 'work in progress'
}

function setup() {
    // create bombs
    for (var i = 0; i < 45; i++) {
        var position = [floor(random(0,15)),floor(random(0,15))];
        if (!bombs.includes(position)) {
            bombs[i] = position;
        }
    }
    // create board
    for (var y = 0; y < 15; y++) {
        board[y] = new Array();
        for (var x = 0; x < 15; x++) {
            board[y][x] = new Mine(y,x);
        }
    }
}

console.log(board);
console.log(bombs);

function Mine(x,y) {
    this.x = x;
    this.y = y;
    this.neighbors = findNeighbors(this.x,this.y);
    for (var iter = 0; iter < 45; iter++) {
        if (bombs[iter] == [this.x,this.y]) {
            this.isBomb = true;
        }
        else {
            this.isBomb = false;
        }
    }
    this.show = function() {
        return 'show'
    }
    this.setValue = function(value) {
        this.value = value;
        return value;
    }
}

例如,当我在控制台中输入炸弹[44]时,它会返回类似[5,11]的内容,但当我检查炸弹[44] = [5,11]时它将始终返回false。是否有一种特定的方法来表示[5,11]数组以便识别它?

2 个答案:

答案 0 :(得分:1)

这是因为你无法在javascript中比较两个数组。你可以做的是使用join(),然后在一步中比较为字符串,

bombs[44].join(",") == [5,11].join(",")

或者您可以单独比较数组的内容

答案 1 :(得分:0)

尝试将for-loop中的条件表达式更改为(var i = 0; i&lt; 45; i ++)to for(var i = 0; i&lt; arr.length; i ++)

这将使循环,遍历整个数组长度,更少的错误空间。 for循环可能容易出错,而且很乏味。