【问题标题】:How do I capture indices when a value is assigned in 2D array?在二维数组中分配值时如何捕获索引?
【发布时间】:2019-07-11 01:55:42
【问题描述】:

我有一个二维数组。如您所料,它由一个行数组组成,每行包含第二个数组形式的列。当我为特定的 [Row][Column] 对分配值时,我希望有一个函数可以捕获已修改元素的索引,然后能够对它们做一些事情。

我尝试使用代理,但我只能让它拦截对 Row 所做的更改,而不是 Row 和 Column 的组合。 即

行[3] = {1,2,3,4}; //有效!

行[3][2] = 42; //不起作用:/

我在 SO、W3Schools、Google 等中进行了广泛的搜索,但我找不到任何满足此特定要求的内容。


    var row=new Array();
    for(var loop=0; loop<10;loop++) //Create 10 rows
    {
        row.push(new Array(10)); //10 columns per row for the sake of example
    }

    row[0][0]="Added a Value at (0,0)";
    row[3][7]="Added a value at (3,7)";

    console.log(row[3][7]); //outputs "Added a value at (3,7)" as expected.

这很好用,我很高兴能够在这个网格结构中管理数据。我希望能够捕获何时分配值并访问两个索引,以便我可以执行验证和后续活动。任何指导将不胜感激。

【问题讨论】:

  • var row=new Array(); 可以是var row = [];
  • 当然可以。我正在使用 new Array() 进行实例化以防止(具有讽刺意味的)堆栈溢出。上面的代码 sn-p 是一个示例,只是为了清楚地演示数组的结构。不过,我认为这对手头的问题没有任何影响。
  • javascript 中没有堆栈溢出之类的东西。 Javascript 数组是动态对象。
  • 那谢谢你。我假设在使用 new Array(n) 实例化时会发生初始分配。

标签: javascript multidimensional-array proxy


【解决方案1】:

代理 getter/setter 仅响应顶级属性更改。见https://github.com/geuis/bodega/blob/master/src/store.js

或者,您可以为每个父数组索引中的row 和/或column 等属性分配一个新的代理对象。这可以让您检测到这些属性之一何时更新。

【讨论】:

  • 感谢您的帮助。不幸的是,javascript 不是我的强项。当 thing[x][y] 被赋值并获取 x 和 y 的值时,是否根本没有办法捕获事件?如果没有,我可以执行 setValue(x,y,value){} 之类的函数,但这看起来很笨拙,如果直接更改值,则会不同步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 2015-06-16
  • 2020-07-30
相关资源
最近更新 更多