2014-10-18 252 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