【问题标题】:Get random element of dictionary in TypeScript?在 TypeScript 中获取字典的随机元素?
【发布时间】:2022-01-09 06:47:31
【问题描述】:

我正在尝试实现将在 TypeScript 中返回字典的随机元素的代码。到目前为止,我已经尝试过:

dict = {
    0: "example 1",
    1: "example 2",
    2: "example 3"
  }

randomGen() { 
    var num = Math.floor(Math.random() * (3));
    console.log(this.dict[num])
  }

但是这给我一个错误:

元素隐式具有“any”类型,因为“number”类型的表达式不能用于索引类型“{ 0: string; 1:字符串; 2:字符串; }

有没有办法解决这个问题?如何从字典中随机选择一个元素?

【问题讨论】:

  • 您可能必须将随机数类型转换为0 | 1 | 2,我认为 TS 不可能在语义上分析代码,并且看到它只能产生这些值。
  • 当我将 num 转换为字符串时,我得到了同样的错误。它说“元素隐式具有'any'类型,因为'string'类型的表达式不能用于索引类型'{0:string; 1:string; 2:string;}”当我运行控制台时出现。日志(this.dicty[num.toString()])
  • 为什么不使用数组?
  • @Jesse 我可以,只是我需要的元素数量可能会变得杂乱无章。我只是发现它是字典格式时更容易阅读,但如果这不是一个选项,我将使用数组:)

标签: javascript angular typescript dictionary


【解决方案1】:

给你。我使用您创建的字典并根据字典的长度(这是您的键)随机选择一个数字。然后返回随机键的值。

这是 Typescript(在 https://www.typescriptlang.org/play 中测试):

var dict: {[key: number]: string} = {
    0: "example 1",
    1: "example 2",
    2: "example 3"
  }

function randomGen() { 
    var value = dict[Math.floor(Math.random() * Object.keys(dict).length)];
    return value;
  }
 
console.log(randomGen());

以下是基本的 JavaScript:

var dict = {
    0: "example 1",
    1: "example 2",
    2: "example 3"
  }

function randomGen() { 
    var value = dict[Math.floor(Math.random() * Object.keys(dict).length)];
    return value;
  }
 
console.log(randomGen());

【讨论】:

  • 这里的关键是dict 被显式键入以具有number 索引。
猜你喜欢
  • 1970-01-01
  • 2020-03-17
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多