以帖子Javascript data structure for fast lookup and ordered looping为起点,我试图构建一个具有二维键的电子表格之类的结构。
对于一维键索引,上面链接的解决方案使用以下代码:
function OrderedMap() {
this.map = {};
this._array = [];
}
OrderedMap.prototype.set = function(key, value) {
// key already exists, replace value
if(key in this.map) {
this.map[key] = value;
}
// insert new key and value
else {
this._array.push(key);
this.map[key] = value;
}
};
我想使此过程适合于两个键key
和row
,而不是单个col
。这就是我想出的。但是在我走这条路之前,是否有更好/更简单的方法,或者对大型数据集将具有更好性能的方法?
更新
我对以下代码的担心是,它基于row
。如果我希望对row
数据采取行动,那将是非常有效的。但是,如果我希望对column
的数据进行操作,则必须遍历每个row
并对每个column
中的row
进行操作。
这是二维结构固有的问题,还是有另一种方法可以在cell
级别上工作并且可以快速循环rows
或columns
?
此代码将用于管理Javascript电子表格中的数据。因此,想要灵活地快速浏览行或列。
感谢您的帮助。
function OrderedMap() {
this.map = {};
this._array = [];
}
OrderedMap.prototype.set = function (row, col, value) {
if(row in this.map) {
if(col in this.map[row]) {
// key already exists, replace value
this.map[row][col] = value;
} else {
// insert new key and value
this._array[row].push(col);
this.map[row][col] = value;
}
}
// insert new key and value
else {
this._array.push(row);
this._array[row] = [];
this._array[row].push(col);
this.map[row] = {};
this.map[row][col] = value;
}
};
var map = new OrderedMap;
map.set(1, 1, {type: "cat"});
map.set(1, 2, {type: "mouse"});
map.set(2, 1, {type: "dog"});
map.set(3, 3, {type: "frog"});
console.log(map.map[2][1]);