Javascript测试数组的角落(网格)

时间:2013-02-13 01:55:41

标签: javascript jquery arrays multidimensional-array

我正在尝试重现Schelling的Segregation模型。我有一个函数(下面)正在测试,看看阵列中的四个直接相邻的单元格是否与当前正在测试的单元格相同或不同或为空。

对于阵列中的每个单元,有四个可能的测试点。但是在角落和侧面斑点上,显然你无法测试超出范围的空间。因此,在函数中,如果它找到一个超出范围的空间,它会递减单元格周围的总数。然而,它一直崩溃告诉我,我有一个未捕获的参考错误:无法读取未定义的属性'0'。我不知道为什么会崩溃。

此代码的最后一行采用商品数量(类似单元格)及其周围的单元格总数(空单元格不计算)并获得相似的百分比。

任何帮助都会被告知我为什么会崩溃并给我一个错误?谢谢!

model.Test = function( i, j )
{
var numberToTest= 4;
var goods= 0;

if ((i - 1) >= 0) 
{
    if (model.BoardArray[i-1][j] != "E")
    {
        if (model.BoardArray[i][j] == model.BoardArray[i-1][j])
        {
            goods++;
        }
    }
    else
    {
        numberToTest--;
    }
}
else
{
    numberToTest--;
}


if((i + 1) < $("#BoardSizeValue").val()) 
{
    if (model.BoardArray[i+1][j] != "E")
    {   
        if (model.BoardArray[i][j] == model.BoardArray[i+1][j])
        {
            goods++;
        }
    }
    else
    {
        numberToTest--;
    }
}
else
{
    numberToTest--;
}


if ((j - 1) >= 0) 
{
    if (model.BoardArray[i][j-1] != "E")
    {
        if (model.BoardArray[i][j] == model.BoardArray[i][j-1])
        {
        goods++;
        }
    }
    else
    {
        numberToTest--;
    }
}
else
{
    numberToTest--;
}


if ((j + 1) < $("#BoardSizeValue").val()) 
{
    if (model.BoardArray[i][j+1] != "E")
    {   
        if (model.BoardArray[i][j] == model.BoardArray[i][j+1])
        {
            goods++;
        }
    }
    else
    {
        numberToTest--;
    }
}
else
{
    numberToTest--;
}


var similar = $("#SimilarSlider").val()/100;
if (numberToTest == 0)
{
    return false;
}
else
{
    var needed = goods/numberToTest;

    if (needed >= similar)
    {
        return false;
    }
    else
    {
        return true;
    }
}
}

1 个答案:

答案 0 :(得分:0)

从查看代码开始,如果Reference Error: Cannot read property '0' of undefined.超出数组范围,则只会获得i

我认为问题可能出在这部分代码中:

if ((i - 1) >= 0) {
    if (model.BoardArray[i-1][j] != "E") {
        if (model.BoardArray[i][j] == model.BoardArray[i-1][j]) {

如果i = $("#BoardSizeValue").val()$("#BoardSizeValue").val()是数组大小的一个索引,那么[i-1]就可以了,但不是[i]。因此,请尝试将代码调整为:

if ((i - 1) >= 0 && i < $("#BoardSizeValue").val()) {
    if (model.BoardArray[i-1][j] != "E") {
        if (model.BoardArray[i][j] == model.BoardArray[i-1][j]) {

这也适用于j比较。