TypeScript中的Hashset

时间:2016-10-21 15:40:16

标签: angular typescript

我正在尝试在TypeScript中做一些非常基本的事情。 Get a list of unique strings while parsing a map as referenced in this post.

这是我试图做的事情:

let myData = new Array<string>();
for (let myObj of this.getAllData()) {
    let name = myObj.name;
    console.log("## we have " + name);
    console.log("### is property ? " + myData.hasOwnProperty(name));
    if (!myData.hasOwnProperty(name)){
        myData.push(name);
    }
}

对于任何字符串,我的打印输出将始终评估为false,重复或不重复。以下是一些示例输出:

 ## we have COW
 ### is property ? false
 ## we have COW
 ### is property ? false
 ## we have RAODN
 ### is property ? false
 ## we have COOL
 ### is property ? false

但是,当该过程完成时,我的列表包含重复项。我试过看过这个documentation,但没有提到一个&#39; hashset&#39;或任何一般情况。

Set的TypeScript中是否有相同的东西?即一系列独特元素

5 个答案:

答案 0 :(得分:19)

它存在!

EmployeeDataResponse employeeDataResponse = restTemplate.exchange(targetUrl, HttpMethod.GET, requestEntity, EmployeeDataResponse.class);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

答案 1 :(得分:5)

这篇文章的标题要求一个HashSet。 Set JavaScript实现循环遍历Set中的每个元素,该元素将为O(n)。为了使数据结构成为HashSet,它应接近O(1)。如果您对HashSet感兴趣,可以很容易地在TypeScript中创建它。这是一个基本的实现:

class HashSet {
    private values = {}

    add(val) {
        this.values[val] = true
    }

    has(val) {
        return this.values[val] === true
    }

    remove(val) {
       delete this.values[val]
    }

    getValues() {
        return Object.keys(this.values)
    }
}

const hashSet = new HashSet()
hashSet.add(5)
hashSet.add(10)
console.log(hashSet.has(5)) // true
console.log(hashSet.getValues()) // [5, 10]
hashSet.remove(5)
console.log(hashSet.has(5)) // false

答案 2 :(得分:1)

对象{}是键值对字典是JavaScript中的哈希集,其中TypeScript是超集,因此您可以使用JS对象来担任此角色。

您发布的代码中的快速版本:

let myData = {};
for (let myObj of this.getAllData()) {
    let name = myObj.name;
    if (!myData[name]){
        myData[name] = name;
    }
}

答案 3 :(得分:1)

我找到了类似这样的解决方案:

let myData = new Array<string>();
for (let myObj of this.getAllData()) {
    let name = myObj.name;
    if (myData.indexOf(name) == -1){
        myData.push(name);
    }
}

不确定这是一个比目前为止更好的解决方案,但我决定坚持使用,直到选择更好的解决方案。

答案 4 :(得分:0)

我发现了一些看起来很有希望的东西 - 这是一个 http://www.timdown.co.uk/jshashtable/jshashset.html

并且它包含 Type Script 的类型定义

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b5bfba2994c91a099cd5bcfd984f6c4c39228e5/types/hashset/index.d.ts

它实现了一个真正的 HashSet - 带有 equalshashcode 函数、存储桶等。