Javascript 如何创建一个方法来验证数组的范围?
我有一个具有某些属性的对象。我想创建一个方法,如果数组的位置在范围内,则返回该方法,但我不知道如何创建它。 (我正在尝试用AngularJS制作扫雷舰,因此此代码位于.factory中) 我的代码如下所示: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
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...