如何获取矩阵中选定元素周围的元素
How to get the elements surrounding a selected element in a matrix
我有一个3x3矩阵,当我在这个矩阵中选择一个元素时,我需要找到该元素周围的元素(即顶部、左侧、右侧、底部)。下面是我用来创建3x3矩阵的代码-
您可以查看此
// 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);
如果我在这个矩阵中选择一个元素,我需要得到所选元素的顶部、左侧、右侧和底部元素。如何进行
此函数将为您提供一个对象,表示矩阵matrix
:中x
、y
处所选元素周围的元素
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指出了完整的解决方案。
此函数将返回一个包含四个值的对象,边上的值将返回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);
}
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]);
}
}
相关文章:
- Javascript选择周围的所有元素
- 我可以在数组中的元素集合周围 $.wrap() 吗?
- 如何在元素中的每个文本部分周围环绕跨度
- 在不影响布局的情况下降低鼠标悬停元素周围的灵敏度的简单方法是什么
- 如何在不移动 html 中周围元素的情况下扩展图像
- 如何在单词周围添加 span 元素
- 我需要在元素周围创建一条线
- 如何在使用jquery / css动态显示周围元素的同时保持当前屏幕位置
- I'm在一些函数周围传递一个元素;这个“;关键字和“;呼叫“;方法
- 元素周围的蛇形移动发光
- 如何获取矩阵中选定元素周围的元素
- 可拖动元素使其以高snapTolerance捕捉到其周围的顶点
- 如果在 DOM 周围移动,SVG 元素将丢失事件处理程序
- 在绝对定位元素周围换行文本
- 如何在现有元素周围创建新的锚标记
- 将鼠标悬停在li上后,在元素周围形成一个框,以显示隐藏的ul
- 在空元素周围创建元素
- 如何删除输入元素周围的默认轮廓
- jQuery在很多元素周围包裹元素
- 是否可以在SVG元素中的circle元素周围包装一个锚标记?