一种交换Map元素位置的方法

时间:2018-05-27 15:44:45

标签: javascript dictionary

我将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 :(得分:1)

  

<强>声明

     

Why is extending native objects a bad practice?

     

另外,数组是重新排序项目的最佳数据结构。

您需要删除所有键/值对,并将新订购的项目分配给this

&#13;
&#13;
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]);
&#13;
&#13;
&#13;