Способ поменять местами элементы карты - PullRequest
0 голосов
/ 27 мая 2018

У меня есть объекты json, хранящиеся в javascript Map.Эти элементы упорядочены в соответствии с тем, как они были добавлены на карту.

var rows =  new Map();

rows.set(1, A);
rows.set(3, B);
rows.set(4, C);
rows.set(7, D);
// A, B, C, D

Теперь я хотел бы переместить объект на одну позицию вверх или вниз, есть ли способ сделать это.

rows.swap(1, 3);
// B, A, C, D

1 Ответ

0 голосов
/ 27 мая 2018

Отказ от ответственности

Почему расширение собственных объектов является плохой практикой?

В противном случае массив является лучшей структурой данных для переупорядоченияitems.

Необходимо удалить все пары ключ / значение и назначить новые упорядоченные элементы для this.

.

Map.prototype.swap = function (a, b) {
    var all = [...this],
        indexA = all.findIndex(([v]) => v === a),
        indexB = all.findIndex(([v]) => v === b);
    
    [all[indexA], all[indexB]] = [all[indexB], all[indexA]];
    this.forEach((_, k, m) => m.delete(k));
    all.forEach(([k, v]) => this.set(k, v));
}

var rows =  new Map;

rows.set(1, 'A');
rows.set(3, 'B');
rows.set(4, 'C');
rows.set(7, 'D');

rows.swap(1, 3);

console.log([...rows]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...