2014-10-18 3 views
0

У меня есть матрица 3x3, и когда я выбираю элемент в этой матрице, мне нужно найти элементы, окружающие этот элемент (то есть, слева, справа, внизу). Ниже приведен код, который я использовал для создания 3х3 матрицы -Как получить элементы, окружающие выбранный элемент в матрице

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

ответ

0

Эта функция даст вам объект, представляющий элементы вокруг выбранного элемента на x, y в матрице matrix:

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 - это значение, установленное для недопустимых значений (например, краевые случаи). Благодаря Трое Джиззи, указав полное решение.

+1

Второй 'мл' должен быть' mr'. Кроме того, это не учитывает краевые случаи. (Скажите, что я впервые использовал эту фразу и имел в виду это _literally_!) –

+0

@TroyGizzi Спасибо за исправление. И, ** превосходная работа в том, чтобы поймать это! Я исправлю. –

0

Эта функция вернет объект, содержащий четыре значения, значение в ребер будет возвращено не определено.

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, верно? –

+0

извините, что вы подразумеваете под «drop =»? и .. 3x3 будет изменен с переменной. «Против углов» он сказал: «Мне нужно получить верхний, левый, правый и нижний элементы выбранного элемента», поэтому я не включил угол. – wizcabbit

+0

Ваш оператор 'if' имеет' x> = 0', но закрытое значение возвращает '='. Вы также не возвращаете верхние левые, верхние правые, нижние левые и нижние правые углы вокруг значения. См. Мой ответ для полного решения. –

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

, акцентируя вопрос на матрицу 3X3 –

Смежные вопросы