Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建一个方法来验证数组的范围?_Javascript_Arrays_Angularjs_Object_Methods - Fatal编程技术网

Javascript 如何创建一个方法来验证数组的范围?

Javascript 如何创建一个方法来验证数组的范围?,javascript,arrays,angularjs,object,methods,Javascript,Arrays,Angularjs,Object,Methods,我有一个具有某些属性的对象。我想创建一个方法,如果数组的位置在范围内,则返回该方法,但我不知道如何创建它。 (我正在尝试用AngularJS制作扫雷舰,因此此代码位于.factory中) 我的代码如下所示: var tableSquare = function(num_rows, num_bombs){ this.numRows = num_rows; this.numBombs = num_bombs; this.positions = new

我有一个具有某些属性的对象。我想创建一个方法,如果数组的位置在范围内,则返回该方法,但我不知道如何创建它。 (我正在尝试用AngularJS制作扫雷舰,因此此代码位于.factory中)

我的代码如下所示:

var tableSquare = function(num_rows, num_bombs){
        this.numRows = num_rows;
        this.numBombs = num_bombs;
        this.positions = new Array(numRows);
        for (i = 0; i < numRows; i++) {
            this.positions[i] = new Array(numRows);
        }
};
我想要一种方法,如:

tableSquare.prototype.inRange = function(){
    //I don't know how to read here i and j
    //in this.positions[i][j]
};
因此,我可以使用此函数制作:

if (this.positions[i-1][j-1].inRange()) this.positions[i-1][j-1].numBombs += 1;

如何创建此inRange方法?谢谢;)

您的表方应该是

 var tableSquare = function(num_rows, num_bombs){
    this.numRows = num_rows;
    this.numBombs = num_bombs;
    this.positions = new Array(this.numRows);

    for (var i = 0; i < this.numRows; i++) {
        this.positions[i] = new Array(this.numRows);
    }
    this.inRange = function(i,j, range){
      if (i>=0 && i<= range-1 && j>=0 && j<=range-1)
         return true;
      return false;
    };
};
您可以按如下方式调用inRange()

objectOne.inRange(1,2,3)
在这里学习javascript:

(一)


2.

谢谢大家的评论。我想要的是这样的东西:

object.positions[1][4].inRange()
此inRange函数应读取位置长度的1和4以及位置[0],并验证它们是否位于de数组中。我不知道如何阅读这个索引(实际上是我做的,但是在positios中添加了这个坐标,以便复制信息)

因此,我使用Adeian May的解决方案“GetNeights()”,如下所示:

var tableSquare = function(num_rows, num_bombs){
    this.numRows = num_rows;
    this.numBombs = num_bombs;

    this.positions = new Array(num_rows);
    for (var i = 0; i < num_rows; i++)
        this.positions[i] = new Array(num_rows);

    this.findingNeighbors = function (i, j) {
        var rowLimit = this.positions.length-1;
        var columnLimit = this.positions[0].length-1;
        var neighbors = [];

        for(var x = Math.max(0, i-1); x <= Math.min(i+1, rowLimit); x++)
            for(var y = Math.max(0, j-1); y <= Math.min(j+1, columnLimit); y++)
                if(x !== i || y !== j)
                    neighbors.push([x,y]);

        return neighbors;
    };
};
然后使用xxxxx.positions[1][4].inRange()我可以读取这个“1”索引和“4”索引。
}

你在这里做得过火了吗?这个表方形需要做什么?你现有的inRange函数在检查边界方面不是已经做得很好了吗?嗨,Adrian,inRange很有效,我正在尝试学习AngularJS和OO Javascript。这就是为什么我想知道怎么做。我正在学习创建这个扫雷器,但是即使你创建了一个tableSquare类,它的inRange函数也是多余的,因为如果你找到了一个tableSquare对象,那么显然你在范围内。是的,但是现在我使用inRange函数来获得拥有炸弹的人周围的所有方块。如果炸弹位于[0][0]位置,则上方或左侧位置没有正方形,因此在访问其属性之前,我必须知道它们是否存在。现在我在angular.factory中使用inRange,但是我还需要验证控制器中的一个范围,因此如果它是类的方法,我就不需要在控制器中复制inRange函数。在控制器中,当一个方块被点击时,我必须再次读取被点击方块周围的所有方块。您提出了一种无参数的inRange方法。这只能说明“这”是否在范围内,当然,如果它存在的话。使用getNeights()方法怎么样?不管怎样,你是认真的说angular不允许你调用全局函数吗?这怎么能阻止你呢?谢谢你,尼廷。我想在位置范围内使用。您的解决方案与我的函数类似,但是从对象调用的。您可以将位置传递到inRange,inRange现在正在接受参数(请原谅我的延迟,我没有收到回复电子邮件的通知)
objectOne.inRange(1,2,3)
object.positions[1][4].inRange()
var tableSquare = function(num_rows, num_bombs){
    this.numRows = num_rows;
    this.numBombs = num_bombs;

    this.positions = new Array(num_rows);
    for (var i = 0; i < num_rows; i++)
        this.positions[i] = new Array(num_rows);

    this.findingNeighbors = function (i, j) {
        var rowLimit = this.positions.length-1;
        var columnLimit = this.positions[0].length-1;
        var neighbors = [];

        for(var x = Math.max(0, i-1); x <= Math.min(i+1, rowLimit); x++)
            for(var y = Math.max(0, j-1); y <= Math.min(j+1, columnLimit); y++)
                if(x !== i || y !== j)
                    neighbors.push([x,y]);

        return neighbors;
    };
};
 neighbors = this.findingNeighbors(i,j).slice();
 for (x = 0; x < neighbors.length; x++)
    this.positions[neighbors[x][0]][neighbors[x][1]].numBombs +=1;
(seudocode)
table.positions.inRange = function(){
    var position x = read first index of the array (positions[x])
    var position y = read second index of the array (positions[y])
    lenght-x = positions.length
    and so on...