Как добавить пары ключ-значение в конце словаря? - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь присвоить 0 каждому отдельному щелчку и 1 каждому двойному щелчку. У меня есть журнал щелчка и положение на карте.Однако все ключи отсортированы в порядке возрастания, хотя я не пытался их сортировать.Есть ли способ добавить клавишу положения с 1 или 0 в качестве значения в конце, при этом убедитесь, что все клики регистрируются?Я даже пытался преобразовать ключ в строку, используя String(i).

Вот код full для проекта, над которым я работаю: Codesandbox

var lastClicked;
var map = {};

var grid = clickableGrid(20, 30, function(el, row, col, i, isDoubleClick) {

  if (!isDoubleClick && !el.className) {
    el.className = "clicked";
    map[String(i)] = 0;
  } else if (isDoubleClick && !el.className) {
    el.className = "niclicked";
    map[String(i)] = 1;
  }
  console.log(map);
});

document.body.appendChild(grid);

1 Ответ

0 голосов
/ 03 марта 2019

Действительно, порядок ключей в простых объектах, посещаемых при их итерации, не гарантируется порядком вставки.В частности, значения, которые (при преобразовании в числа) являются положительными целыми числами в 32-битном диапазоне, посещаются в числовом порядке.

Массивы являются альтернативой, поскольку они четко поддерживают порядок вставки при использовании push.Недостатком является то, что они не предлагают поведение словаря, поэтому вы можете найти запись по (оригинальному) ключу.

Если вам действительно нужно поведение словаря и, в то же время, порядок вставки, тогда Map может быть решением:

var lastClicked;
var map = new Map; // <---

var grid = clickableGrid(20, 30, function(el, row, col, i, isDoubleClick) {

  if (!isDoubleClick && !el.className) {
    el.className = "clicked";
    map.set(i, 0);
  } else if (isDoubleClick && !el.className) {
    el.className = "niclicked";
    map.set(i, 1);
  }
  map.forEach((value, key) => console.log(key, value)); //<-- insertion order!
});

document.body.appendChild(grid);

Вы можете использовать: map.get(key), чтобы получить значение 0/1 для данного ключа в постоянное время, как если бы вы использовали обычный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...