为了账号安全,请及时绑定邮箱和手机立即绑定

设置二维数组的最大参数

设置二维数组的最大参数

慕仙森 2021-07-03 13:00:37
我正在阅读一些 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]。
查看完整描述

2 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

您可以为此使用代理:


const handler = {

  set(target, prop, value, receiver){

    if (prop > target.length - 1)

      throw new RangeError()


    return Reflect.set(...arguments)

  }

}


const createDimension = size => new Proxy(new Array(size), handler)

const grid = createDimension(10)


for(i=0;i<10;i++){

  grid[i] = createDimension(10)

}


grid[2][0] = 'foo'

console.log(grid)


// Should throw range error

grid[2][12] = 'foo'

console.log(grid)


查看完整回答
反对 回复 2021-07-08
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您只密封了根数组,但忘记为子数组密封。这是你应该做的:


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);

        grid.forEach(Object.seal) // <----- you forgot this

        // the above line is the shorter version of this:

        // grid.forEach(childGrid => Object.seal(childGrid))

        

    }

}


createGrid(10);


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

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


console.log(grid);


查看完整回答
反对 回复 2021-07-08
  • 2 回答
  • 0 关注
  • 272 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号