我正在尝试从地图转换键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");
}
好的,我解决了这个问题。问题是,我期待一个对象与地图对象,但他们真正包含的对象文字,需要首先转换为地图对象。代码现在看起来像这样:
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)集合中有一个输出,如下所示: 我对斯卡拉和斯帕克是新手,我试着做这样的事情。 但是,这不起作用。:/此操作完成后