【问题标题】:A way to Swap the position of Map elements一种交换地图元素位置的方法
【发布时间】:2018-11-06 07:22:21
【问题描述】:

我将 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

【问题讨论】:

  • 如果你想设置一个特定的顺序,你不应该使用Map
  • 我不想对项目进行排序。我只想更改最多 2 个项目的顺序
  • 同样的问题 - 地图不支持这种操作。

标签: javascript dictionary


【解决方案1】:

免责声明

Why is extending native objects a bad practice?

否则数组是重新排序项目的最佳数据结构。

您需要删除所有键/值对并将新订购的项目分配给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]);

【讨论】:

  • 我错过了这是一个坏主意的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2022-11-19
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
相关资源
最近更新 更多