更改具有许多数组的对象中的数字



我有一个字段对象,其中包含多个用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);

最新更新