Javascript二维索引结构,用于快速查找和有序循环

时间:2018-12-18 07:38:15

标签: javascript multidimensional-array indexing

以帖子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;
    }
};

我想使此过程适合于两个键keyrow,而不是单个col。这就是我想出的。但是在我走这条路之前,是否有更好/更简单的方法,或者对大型数据集将具有更好性能的方法?

更新 我对以下代码的担心是,它基于row。如果我希望对row数据采取行动,那将是非常有效的。但是,如果我希望对column的数据进行操作,则必须遍历每个row并对每个column中的row进行操作。

这是二维结构固有的问题,还是有另一种方法可以在cell级别上工作并且可以快速循环rowscolumns >

此代码将用于管理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]);

0 个答案:

没有答案