我有一个字段对象,其中包含多个用JavaScript编写的一维数组。我希望能够通过单击按钮或其他方式更改对象中的数字。一种方法是,我创建一个完整的新对象,只需进行该更改。但我不想每次都创建一个全新的。
那么怎么可能将行中间的 11 更改为任何其他数字呢?我需要对我的瓦片地图进行此更改。
var fields = [
[2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,0],
[7,1,2,2,7,7,7,7,7,7,7,7,7,3,5,7,0],
[7,7,7,7,7,7,7,1,7,7,7,7,7,7,7,7,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0],
[7,7,3,7,7,7,7,7,0,7,7,7,4,7,0,0,0],
[0,0,0,0,0,7,7,7,0,0,7,7,7,7,7,0,0],
[2,2,2,0,0,7,7,7,0,0,0,7,7,2,2,2,2],
[2,1,2,2,0,7,7,7,7,7,0,2,2,2,2,0,0],
[7,7,2,2,0,0,7,7,11,7,0,0,0,0,0,0,0], // this row i want change the 11
[7,7,7,2,0,7,7,7,7,7,7,7,2,2,0,0,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,0,7,7,0,7,7,7,7,3,7,7,2,2,2,2],
[2,7,0,0,0,0,7,0,7,7,7,7,7,1,2,2,2],
[2,1,7,7,7,0,0,0,7,7,7,7,2,2,2,0,0],
[2,2,2,2,7,0,7,7,7,7,7,2,2,0,0,0,0],
[2,2,2,2,2,2,7,7,7,7,7,2,0,0,0,0,0],
]
var fields = [
[2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,0],
[7,1,2,2,7,7,7,7,7,7,7,7,7,3,5,7,0],
[7,7,7,7,7,7,7,1,7,7,7,7,7,7,7,7,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0],
[7,7,3,7,7,7,7,7,0,7,7,7,4,7,0,0,0],
[0,0,0,0,0,7,7,7,0,0,7,7,7,7,7,0,0],
[2,2,2,0,0,7,7,7,0,0,0,7,7,2,2,2,2],
[2,1,2,2,0,7,7,7,7,7,0,2,2,2,2,0,0],
[7,7,2,2,0,0,7,7,11,7,0,0,0,0,0,0,0], // this row i want change the 11
[7,7,7,2,0,7,7,7,7,7,7,7,2,2,0,0,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,0,7,7,0,7,7,7,7,3,7,7,2,2,2,2],
[2,7,0,0,0,0,7,0,7,7,7,7,7,1,2,2,2],
[2,1,7,7,7,0,0,0,7,7,7,7,2,2,2,0,0],
[2,2,2,2,7,0,7,7,7,7,7,2,2,0,0,0,0],
[2,2,2,2,2,2,7,7,7,7,7,2,0,0,0,0,0],
];
function changethe11(){
fields[8][8] = 32;
console.log(fields);
}
<button onclick=changethe11()>change the 11</button>
您可以遍历一个多维数组,其中包含与数组具有的维度一样多的 for。
for(var i = 0; i < fields.length; i++){
for(var j = 0; j < fields[i].length; j++){
if(fields[i][j] == 11){
fields[i][j] = "THE VALUE YOU WANT";
}
}
}
你可以访问任何你想要的位置,如果你不知道数组中的键,如果你知道它们,你可以这样做:
fields[row][column]
您可以使用位移位向右移动一位,这会将值除以 2 并返回中间索引的整数。
演示
var fields = [
[2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0],
[7, 1, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 5, 7, 0],
[7, 7, 7, 7, 7, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 0],
[7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0],
[7, 7, 3, 7, 7, 7, 7, 7, 0, 7, 7, 7, 4, 7, 0, 0, 0],
[0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0],
[2, 2, 2, 0, 0, 7, 7, 7, 0, 0, 0, 7, 7, 2, 2, 2, 2],
[2, 1, 2, 2, 0, 7, 7, 7, 7, 7, 0, 2, 2, 2, 2, 0, 0],
[7, 7, 2, 2, 0, 0, 7, 7, 11, 7, 0, 0, 0, 0, 0, 0, 0],
[7, 7, 7, 2, 0, 7, 7, 7, 7, 7, 7, 7, 2, 2, 0, 0, 0],
[7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2],
[0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2],
[0, 0, 0, 7, 7, 0, 7, 7, 7, 7, 3, 7, 7, 2, 2, 2, 2],
[2, 7, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 1, 2, 2, 2],
[2, 1, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 2, 2, 2, 0, 0],
[2, 2, 2, 2, 7, 0, 7, 7, 7, 7, 7, 2, 2, 0, 0, 0, 0],
[2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 2, 0, 0, 0, 0, 0],
],
row = fields.length >> 1,
result = fields[row],
col = result.length >> 1;
fields[row][col] = 34
console.log(fields)
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以在数组上运行这样的函数,并为其提供要更改的数字 (num( 和要更改为的数字的参数 (newNum(
var fields = [
[2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,0],
[7,1,2,2,7,7,7,7,7,7,7,7,7,3,5,7,0],
[7,7,7,7,7,7,7,1,7,7,7,7,7,7,7,7,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0],
[7,7,3,7,7,7,7,7,0,7,7,7,4,7,0,0,0],
[0,0,0,0,0,7,7,7,0,0,7,7,7,7,7,0,0],
[2,2,2,0,0,7,7,7,0,0,0,7,7,2,2,2,2],
[2,1,2,2,0,7,7,7,7,7,0,2,2,2,2,0,0],
[7,7,2,2,0,0,7,7,11,7,0,0,0,0,0,0,0], // this row i want change the 11
[7,7,7,2,0,7,7,7,7,7,7,7,2,2,0,0,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,0,7,7,0,7,7,7,7,3,7,7,2,2,2,2],
[2,7,0,0,0,0,7,0,7,7,7,7,7,1,2,2,2],
[2,1,7,7,7,0,0,0,7,7,7,7,2,2,2,0,0],
[2,2,2,2,7,0,7,7,7,7,7,2,2,0,0,0,0],
[2,2,2,2,2,2,7,7,7,7,7,2,0,0,0,0,0],
]
function swapValues(num, newNum) {
fields = fields.map(val => val.map(v => v === num ? newNum : v))
}
swapValues(11, 9)
console.log(fields)
如果您还想更改数组中的其他数字或所有 11 个数字,则可能会出现问题......代码向下,循环每个数组并找到要替换的数字,在这种情况下为 11,然后给出一个新值 15,但它对多维数组中的所有 11 都这样做......否则,其他人会要求你只取代那个位置。如果你想用另一个数字替换所有 7 更改值,numberToReplace = 7 和 v[i] = 新值等等。但是您也可以放大它,例如,您可以更改第二个数组中的所有 7 或第四个数组,只需添加一个 if i==8 在这种情况下,第 8 个数组为 11,但您可以替换 i=2 中的所有 7 个,依此类推......再见
var fields = [[2,2,2,2,2,7,7,7,7,7,7,7,7,7,7,7,0],
[7,1,2,2,7,7,7,7,7,7,7,7,7,3,5,7,0],
[7,7,7,7,7,7,7,1,7,7,7,7,7,7,7,7,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0],
[7,7,3,7,7,7,7,7,0,7,7,7,4,7,0,0,0],
[0,0,0,0,0,7,7,7,0,0,7,7,7,7,7,0,0],
[2,2,2,0,0,7,7,7,0,0,0,7,7,2,2,2,2],
[2,1,2,2,0,7,7,7,7,7,0,2,2,2,2,0,0],
[7,7,2,2,0,0,7,7,11,7,0,0,0,0,0,0,0], // this row i want change the 11
[7,7,7,2,0,7,7,7,7,7,7,7,2,2,0,0,0],
[7,7,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,7,7,7,7,7,7,7,7,7,7,7,2,2,2,2],
[0,0,0,7,7,0,7,7,7,7,3,7,7,2,2,2,2],
[2,7,0,0,0,0,7,0,7,7,7,7,7,1,2,2,2],
[2,1,7,7,7,0,0,0,7,7,7,7,2,2,2,0,0],
[2,2,2,2,7,0,7,7,7,7,7,2,2,0,0,0,0],
[2,2,2,2,2,2,7,7,7,7,7,2,0,0,0,0,0]];
$.each(fields,function(k,v){
//console.log(fields[k]);
$.each(v,function(i,j){
//console.log(j);
numberToReplace = 11;
if (j==numberToReplace){
v[i]=15;//<--New value 15
}
});
});
console.log(fields);