猿问

设置二维数组的最大参数

我正在阅读一些 JS 数组教程,我有一个问题。


假设我像这样创建了一个二维数组:


var arr = new Array(10);


for (var i = 0; i < arr.length; i++) {

    arr[i] = new Array(10);

}

如何设置二维数组的最大参数,以便在将值附加到某些单元格时会被拒绝?


例如,


arr[1][2] = "one";

arr[5][15] = "two";

arr[5][15] 不在创建数组的代码中设置的参数之外,但仍会在不应该被创建并传递到数组时。


阅读评论后 - 下面的新代码:


let grid = []


const createGrid = (x) => {


    grid = new Array(x);


    for (var i = 0; i < grid.length; i++) {

        grid[i] = new Array(10);

    }

    if(Object.seal) { 

        Object.seal(grid);

    }

}


createGrid(10);


grid[1][2] = "one";

grid[5][15] = "two";


console.log(grid);

这不起作用,但是当将第一个值设置为大于网格 ( grid[15][5])的设置长度时,它会被拒绝,但当它设置为 时则不会grid[5][15]。


慕仙森
浏览 273回答 2
2回答

料青山看我应如是

您可以为此使用代理:const handler = {&nbsp; set(target, prop, value, receiver){&nbsp; &nbsp; if (prop > target.length - 1)&nbsp; &nbsp; &nbsp; throw new RangeError()&nbsp; &nbsp; return Reflect.set(...arguments)&nbsp; }}const createDimension = size => new Proxy(new Array(size), handler)const grid = createDimension(10)for(i=0;i<10;i++){&nbsp; grid[i] = createDimension(10)}grid[2][0] = 'foo'console.log(grid)// Should throw range errorgrid[2][12] = 'foo'console.log(grid)

吃鸡游戏

您只密封了根数组,但忘记为子数组密封。这是你应该做的:let grid = []const createGrid = (x) => {&nbsp; &nbsp; grid = new Array(x);&nbsp; &nbsp; for (var i = 0; i < grid.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; grid[i] = new Array(10);&nbsp; &nbsp; }&nbsp; &nbsp; if(Object.seal) {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Object.seal(grid);&nbsp; &nbsp; &nbsp; &nbsp; grid.forEach(Object.seal) // <----- you forgot this&nbsp; &nbsp; &nbsp; &nbsp; // the above line is the shorter version of this:&nbsp; &nbsp; &nbsp; &nbsp; // grid.forEach(childGrid => Object.seal(childGrid))&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }}createGrid(10);grid[1][2] = "one";grid[5][15] = "two";console.log(grid);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答