我正在使用TypeScript开发Web项目。在这里,我需要打字稿中的HashTable功能,如C#HashTable。但是我已经在JavaScript中开发了它。
this.length = 0;
this.items = [];
this.add = function (key, value) {
this.previous = undefined;
if (this.containsKey(key)) {
this.previous = this.items[key];
} else {
this.length++;
}
this.items[key] = value;
return this.previous;
};
this.clear = function () {
this.items = {};
this.length = 0;
};
this.contains = function (key) {
return this.items.hasOwnProperty(key);
};
this.containsKey = function (key) {
return this.items.hasOwnProperty(key);
};
this.containsValue = function (key) {
return (this.items.hasOwnProperty(key) && this.items[key] != undefined) ? true : false;
};
this.getItem = function (key) {
if (this.containsKey(key))
{
return this.items[key]
}
else
{
return undefined;
}
};
this.keys = function () {
var keys = [];
for (var k in this.items) {
if (this.containsKey(k)) {
keys.push(k);
}
}
return keys;
};
this.remove = function (key) {
if (this.containsKey(key)) {
this.previous = this.items[key];
this.length--;
delete this.items[key];
return this.previous;
} else {
return undefined;
}
};
this.values = function () {
var values = [];
for (var k in this.items) {
if (this.containsKey(k)) {
values.push(this.items[k]);
}
}
return values;
};
this.each = function (fn) {
for (var k in this.items) {
if (this.containsKey(k)) {
fn(k, this.items[k]);
}
}
};
var previous = undefined;
}
return HashTable;
像这样,打字稿有预定义的代码吗? 或者我需要将这些代码从JS重写为TS? 打字稿中这个哈希表有什么简单的属性或类吗?
或者 TS 中的任何其他属性来执行相同的哈希表功能?
Modern JavaScript 有三个选项:
-
Map
,最接近我所知的哈希表。它的主要优点是它的密钥可能是Object
型 . -
Set
,它基本上是一个独特的数组。 -
Object
也被称为{}
。键值存储。
我建议使用对象,但是如果您的密钥需要对象,请使用Map
.
JavaScript Object
,或{}
,比Map
快20倍。因此,仅当您需要使用对象作为键时才使用 Map
。
如上所述,
Map 可能是正确的答案,但也许带有类型的哈希图看起来像这样会起作用:
{ [key: string]: Type; }
or
{ [key: number]: Type; }