Привязать значения различных элементов в массиве (JavaScript) - PullRequest
0 голосов
/ 11 июня 2018

Проблема: я хочу связать значения в массиве таким образом, чтобы при изменении одного значения другое тоже менялось, и наоборот.

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.

Я нашел способ сделать этос предметами, но это не так чисто, как хотелось бы.Мой друг сказал мне, что это невозможно, но я в этом сомневаюсь.

1 Ответ

0 голосов
/ 11 июня 2018

Просто используйте объекты и ссылайтесь на них:

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