【问题标题】:Bind the values of diffrent elements in an array (JavaScript)绑定数组中不同元素的值 (JavaScript)
【发布时间】:2018-11-20 22:50:20
【问题描述】:

问题: 我想以一种方式绑定数组中的值,当我更改一个值时,另一个值也会更改,反之亦然。

var array = [1,2,3,1];
array[0] = array[3];
array[0] = 7;
console.log(array[3]) //this will give 1 and I need 7 here.

我想出了一种方法来处理对象,但它并不像我希望的那样干净。我的朋友告诉我,这是不可能做到的,但我对此表示怀疑。

【问题讨论】:

  • 获得 7 的逻辑是什么?
  • 你需要为此编写自己的逻辑
  • 我会假设他们正在寻找没有对象的 JS 中找不到的引用 (array[3] refs array[0])。
  • 只有 javascript 中的对象可以被指定为引用,并且您传递的 array[3] 的值在您的情况下是 Number 类型,而不是引用。

标签: javascript arrays data-binding binding bind


【解决方案1】:

只需使用对象并引用它们:

var array = [{v: 1}, {v: 2}, {v: 3}, {v: 1}];
array[0] = array[3];
array[0].v = 7;
console.log(array[3].v);

要获得更易读的代码,您可能需要实现自定义地图:

class LinkMap extends Map {
  get(k) {
     return (super.get(k) || {}).value;
  }
  set(k, value) {
     if(super.has(k)) {
       super.get(k).value = value;
     } else {
      super.set(k, { value });
     }
  }
  link(key, to) {
    return super.set(to, super.get(key));
  }
}

所以可以这样做:

const list = new LinkMap();
 list.set(0, 1).set(1, 2).set(2, 3).link(0, 4);
 list.set(4, 7);
 console.log(list.get(0));

【讨论】:

  • 只是为了补充:您尝试做的事情对于按值访问的数字或字符串是不可能的。因此,通过使用一个对象,您可以访问该对象的引用。
猜你喜欢
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多