我将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
答案 0 :(得分: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]);
&#13;