2014-10-18 132 views
0

我有一个3x3矩阵,当我在这个矩阵中选择一个元素时,我需要找到围绕该元素的元素(即顶部,左侧,右侧,底部)。 下面是我用来创建一个3x3矩阵码 - 如果我在这个矩阵中选择一个元素如何获得矩阵中选定元素周围的元素

You can view this

// declare array of multi dimensions 
var arrOfArr = new Array(3); 
// or declare as [[],[],[]] as suggested by Elijah 

// allocate storage 
for (var x = 0; x < arrOfArr.length; x++) { 
    arrOfArr[x] = new Array(3); 
} 

// Populate the array 
// first array 
arrOfArr[0][0] = "00"; 
arrOfArr[0][1] = "01"; 
arrOfArr[0][2] = "02"; 

// second array 
arrOfArr[1][0] = "10"; 
arrOfArr[1][1] = "11"; 
arrOfArr[1][2] = "12"; 

// third array 
arrOfArr[2][0] = "20"; 
arrOfArr[2][1] = "21"; 
arrOfArr[2][2] = "22"; 

alert(arrOfArr); 

,我需要上,左,所选元素的右侧和底部元素。我怎样才能做到这一点

+2

那么,如果你选择,说(1,1)顶部元素将有相同的列,但少1行。左侧和右侧将是相同的行,不同的列,并且底部将是同一列,下面的行。 – Jhecht 2014-10-18 01:29:32

回答

0

此功能将给予您代表的矩阵matrixxy所选元素周围的元素的对象:

function getSurroundingElements(x, y, matrix) { 
    var x_limit = matrix.length; 
    if (x_limit == 0) return null; //matrix is empty 

    var y_limit = matrix[0].length; //Assumes all rows in the matrix are of same length (otherwise, not a matrix, right?) 

    return { 
    'tl':((x-1 >= 0 && y-1 >= 0)?matrix[x-1][y-1]:null), 
    'tc':((y-1 >= 0)?matrix[x][y-1]:null), 
    'tr':((x+1 < x_limit && y-1 >= 0)?matrix[x+1][y-1]:null), 

    'ml':((x-1 >= 0)?matrix[x-1][y]:null), 
    'mr':((x+1 < x_limit)?matrix[x+1][y]:null), 

    'bl':((x-1 >= 0 && y+1 < y_limit)?matrix[x-1][y+1]:null), 
    'bc':((y+1 < y_limit)?matrix[x][y+1]:null), 
    'br':((x+1 < x_limit && y+1 < y_limit)?matrix[x+1][y+1]:null) 
    }; 
} 

注意:如果矩阵为空null返回和null是为非法值(即边缘案例)设置的值 - 感谢Troy Gizzi指出一个完整的解决方案。

+1

第二个'ml'应该是'mr'。此外,这并不考虑边缘情况。 (比如说,这是我第一次使用这个短语,意思是_literally_!) – 2014-10-18 01:55:35

+0

@TroyGizzi感谢您的纠正。而且,**超级**的工作捕捉!我会纠正的。 – 2014-10-18 01:56:40

0

此函数将返回一个包含四个值的对象,边中的值将返回undefined。

var MAXTRIX_LENGTH = 3; 
function select(x, y) { 
    var maxIndex = MAXTRIX_LENGTH - 1; 
    if (x >= 0 && x <= maxIndex && y >= 0 && y <= maxIndex) { 
     return { 
      "top": y > 0 ? arrOfArr[x - 1][y] : undefined, 
      "bottom": y < maxIndex ? arrOfArr[x + 1][y] : undefined, 
      "left": x > 0 ? arrOfArr[x][y - 1] : undefined, 
      "right": x < maxIndex ? arrOfArr[x][y + 1] : undefined 
     }; 
    } else { 
     return undefined; 
    } 
} 

var result = select(0, 1); 

if (result == undefined) { 
    alert("Index over range.") 
} else { 
    alert("top: " + result.top + " bottom: " + result.bottom + " left: " + result.left + " right: " + result.right); 
} 
+0

为什么你在返回值中放入'='?而且,你为什么反对角落? ;)这也仅限于3x3矩阵,对吧? – 2014-10-18 02:32:20

+0

对不起,你说'drop ='是什么意思?和.. 3x3将被修改与变量。 '对角'他说我需要得到所选元素的顶部,左侧,右侧和底部元素,所以我没有包括角落。 – wizcabbit 2014-10-18 03:01:38

+0

您的'if'语句具有'x> = 0',但封闭的返回值会丢弃'='。您也不会返回值的左上角,右上角,左下角和右下角。查看我的答案获得完整的解决方案。 – 2014-10-18 03:05:31

0

请切我的小提琴。 DEMO

var arrOfArr = new Array(3); 
for (var x = 0; x < arrOfArr.length; x++) { 
    arrOfArr[x] = new Array(3); 
} 
arrOfArr[0][0] = "450"; 
arrOfArr[0][1] = "212"; 
arrOfArr[0][2] = "102"; 
// second array 
arrOfArr[1][0] = "120"; 
arrOfArr[1][1] = "1211"; 
arrOfArr[1][2] = "1112"; 
// third array 
arrOfArr[2][0] = "220"; 
arrOfArr[2][1] = "2121"; 
arrOfArr[2][2] = "2222"; 
$("input[type=submit]").click(function(){ 
    var selectedVal=($("input[type=text]").val()); 
    var result="Element not found in matrix"; 
    //alert(arrOfArr[2][0]==selectedVal); 
    ($.each(arrOfArr,function(index,value){ 
     $.each(value,function(subIndex,subVal){ 
      if(selectedVal==subVal){ 
      var leftval = checkNoElement(arrOfArr, index, subIndex-1); 
      var rightval=checkNoElement(arrOfArr, index,subIndex+1); 
      var upperVal=checkNoElement(arrOfArr, index-1, subIndex); 
      var lowerVal=checkNoElement(arrOfArr,index+1, subIndex); 
       result=(" Left:"+leftval+ " \n right:" + rightval + " \n Upper:" + upperVal + " \n Lower:" + lowerVal); 
      } 
      }); 
    })); 
    alert(result) 
}); 

function checkNoElement(element,index1,index2){ 
var firstChk=element[index1]== undefined ? undefined :""; 
    if(firstChk==undefined){ 
     return "no element"  
    }else{ 
    return (element[index1][index2]== undefined ? "no element":element[index1][index2]); 
    } 

} 
+0

accroding这个问题为3X3矩阵 – 2014-10-18 06:43:46