当前位置: 首页 > 知识库问答 >
问题:

尝试将映射键转换为数组时遇到错误

华凡
2023-03-14

我正在尝试从地图转换键iterable,但当我这样做时,我得到错误:

统计数字produceTypeData。钥匙不是一种功能

我将遵循这个问题的答案:如何将映射键转换为数组?让它工作。

当我尝试另一种方法(使用Array.from(statistics.produceTypeData.keys()))时,我得到一个不同的错误,即:

类型IterableIterator不是数组类型。

在评论中我读到,在本例中,应该将数组括起来。扩展语法中的from()语句,但当我这样做时,我也会得到错误统计信息。produceTypeData。按键不是功能

以下是代码片段:

  produceTypeLabels: ProduceType[];
      this.produceTypeLabels = [...Array.from(statistics.produceTypeData.keys())]; 

产品类型枚举:

export enum ProduceType {
    FRUIT = "FRUIT",
    VEGETABLE = "VEGETABLE",
    HERB = "HERB",
    NUT = "NUT",
    SEED = "SEED",
    MUSHROOM = "MUSHROOM",
    CACTUS = "CACTUS"
}

statistics对象来自get请求,如下所示:

export class DatabaseStatisticsDTO {
    produceTypeData: Map<ProduceType,number>;
    plantTypeData:  Map<PlantType,number>;
    lifeCycleData:  Map<LifeCycleType,number>;
    sunExposureData:  Map<SunExposure,number>;
    ripeColorData:   Map<Color,number>;
    frostResistanceData: Map<boolean,number>;
    teaPlantData: Map<boolean,number>;
    climbingPlantData: Map<boolean,number>; 
    pepperData: Map<boolean,number>; 
}

有人知道我为什么会有这些错误吗?我知道我可以简单地迭代可迭代的键并以这种方式填充数组,但我真的很想用传播语法或Array.from()函数来完成。

非常感谢。

编辑:

这是来自调试器的堆栈跟踪,当我尝试使用statistics.produceTypeData.keys()

RROR TypeError: statistics.produceTypeData.keys is not a function
    at SafeSubscriber._next (database-statistics.component.ts:65)
    at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub (Subscriber.js:195)
    at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next (Subscriber.js:133)
    at Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next (Subscriber.js:77)
    at Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next (map.js:41)
    at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at FilterSubscriber.push../node_modules/rxjs/_esm5/internal/operators/filter.js.FilterSubscriber._next (filter.js:38)
    at FilterSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber.notifyNext (mergeMap.js:79)

编辑2:更改了数据库统计DTO,以便用空的Map对象初始化map字段,但是在get请求之后,这些字段仍然未定义。

export class DatabaseStatisticsDTO {
    produceTypeData: Map<ProduceType,number> = new Map<ProduceType,number>();
    plantTypeData:  Map<PlantType,number> = new Map<PlantType,number>();
    lifeCycleData:  Map<LifeCycleType,number> = new Map<LifeCycleType,number>();
    sunExposureData:  Map<SunExposure,number> = new Map<SunExposure,number>();
    ripeColorData:   Map<Color,number> = new Map<Color,number>();
    frostResistanceData: Map<boolean,number> = new Map<boolean,number>();
    teaPlantData: Map<boolean,number> = new Map<boolean,number>();
    climbingPlantData: Map<boolean,number> = new Map<boolean,number>();
    pepperData: Map<boolean,number> = new Map<boolean,number>(); 
}

这是发出get请求的代码:

  getStatistics():Observable<DatabaseStatisticsDTO>{
    return this.http.get<DatabaseStatisticsDTO>(this.apiUrl + "/mod/getstatistics");
  }

共有1个答案

詹高畅
2023-03-14

好的,我解决了这个问题。问题是,我期待一个对象与地图对象,但他们真正包含的对象文字,需要首先转换为地图对象。代码现在看起来像这样:

  this.produceTypeLabels = Object.keys(statistics.produceTypeData); 
  this.produceTypeData  = (<any>Object).values(statistics.produceTypeData).map(a => Number(a));
  this.produceTypeBackgroundColors = ["#9400D3","#0000FF","#00FF00"];

我使用Object.keys从对象文字和中获取关键部分(

 类似资料:
  • 控制台输出 编辑:

  • 我是初学C#的,我想为学校创建一个计算器,但是在第45行出现了一个错误。错误消息:字符串长度必须正好为一个字符。我认为在拆分String数组然后另存为char数组之后会有一个错误。但我不知道为什么,也许是假的。 代码部分: 错误消息由char[]发送。 我想我有一个从字符串[]分裂的翻译错误

  • 如何获取groovy映射的键/值对值并循环到groovyJSON数组元素中?。 例如: 输入: def childmap = ["data1": "123 "," data2": "234 "," data3": "456"] def儿童地图2=["data4":"123","data5":"234","data6":"456","date7":"676"] def父母地图=["Key1":"Va

  • 我一直在研究Jackson,但似乎必须将映射转换为JSON,然后将生成的JSON转换为POJO。 有没有一种方法可以将地图直接转换成POJO?

  • 我在Spark中有一个数据框,看起来像这样: 它有30列:只显示其中的一些! 因此,我必须在Scala中将这个数据帧转换成一个键值对,使用键作为数据帧中的一些列,并为这些键分配从索引0到计数(不同的键数)的唯一值。 例如:使用上面的案例,我希望在Scala中的map(key-value)集合中有一个输出,如下所示: 我对斯卡拉和斯帕克是新手,我试着做这样的事情。 但是,这不起作用。:/此操作完成后