javascript - 使用 typescript 在集合列表中查找元素

标签 javascript typescript foreach

我正在为我的问题寻找更好的解决方案。我有一个这种格式的数据集合,想知道使用 typescript 从集合中检索数据的最快方法是什么。

  • 首先要做的是通过解析集合中的每个元素来识别,并在识别出元素后立即分解。

我们可以使用 C# 和其他语言的更好解决方案。但是,我正在寻找更好的 typescript 解决方案。

结构如下:

myData:
{
  Id: string,
  Name: string,
  Address: string
  Salary: number
  phone: number
}

假设我们有大约 500 条 ID 唯一的记录。 我在一个表中只显示(ID 和名称),该表的每一行都有复选框。

当我选择一些复选框时,我需要通过遍历此列表并执行一些操作来收集每一行的相应数据。

var selected: ImyData[];
for(var d in data)
{
  if(d.id == myId)
  {
    this.selected.id = d.id;
    this.selected.address = d.address
    this.selected.salary = d.salary
    return;
   }
 }

但这种方法会不断检查集合中的每个元素,并返回给我性能不佳的地址。想知道在 typescript 中实现的任何建议吗?

最佳答案

你可以在 Javascript 中创建一个“字典”(又名 assoc 数组、哈希表或映射),并得到这样的项目,它是 O(1)

var selected = allItems[id];

使用 for 循环,您可以初始创建字典。您将只执行一次 for 循环,并且每次查找都非常快(因为它不需要 for 循环)

例子:

//init, do this once!
var initObjects = [{ id: "id1", name:"name1" }, { id: "id2", name:"name2" }]

var dict = {};

for (i = 0; i < initObjects.length; i++) {
    var item = initObjects[i];
    dict[item.id] = item;
}

//retrieving values. No loops! O(1) complexity. Very fast!
console.log(dict["id2"])
console.log(dict["id1"])

(O(1) = 与列表大小无关的恒定查找时间。因此在包含 100 或 1000000 个项目的列表中查找花费相同的时间)

关于javascript - 使用 typescript 在集合列表中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43506387/

相关文章:

javascript - 使用canvas在几秒钟内逐像素显示图片

javascript - 每次我调用它时,Close 方法调用都会递增

Typescript Pick Array 未按预期工作

javascript - Javascript中符号 ":"是什么意思?

php - Foreach 循环与 while 循环结果

Java 迭代器和 for-each-loop。有什么方法可以访问底层迭代器?

map 键的Javascript列表

javascript - Meteor - 在一段时间内(按日期)解锁模板

angular - RxJS 6 页面不活动时暂停或缓冲可观察

javascript - 使用 javascript 或 php 向动态创建的元素添加相同的类