首页 > 解决方案 > 打字稿映射和/或减少:将数组映射到其他数组类型

问题描述

我需要映射一个Array<Quote>,其中Quote是:

export interface Quote {
    readonly chronoUnit: Quote.ChronoUnitEnum;
    readonly downloadedDocs: number;
    readonly downloadedKb: number;
    readonly uploadedKb: number;
    readonly uploadedRefs: number;
}

export namespace Quote {
    export type ChronoUnitEnum = 'HOUR' | 'DAY' | 'MONTH' | 'YEAR';
    export const ChronoUnitEnum = {
        HOUR: 'HOUR' as ChronoUnitEnum,
        DAY: 'DAY' as ChronoUnitEnum,
        MONTH: 'MONTH' as ChronoUnitEnum,
        YEAR: 'YEAR' as ChronoUnitEnum
    };
}

到一个Array<AlignedQuote>

export interface AlignedQuote {
    readonly alignedType: AlignedQuote.AlignedEnum;
    readonly hour: number;
    readonly day: number;
    readonly month: number;
    readonly year: number;
}

export namespace AlignedQuote {
    export type AlignedEnum = 'DOWNLOADEDDOCS' | 'DOWNLOADEDKB' | 'UPLOADEDKB' | 'UPLOADEDREFS';
    export const AlignedEnum = {
        HOUR: 'DOWNLOADEDDOCS' as AlignedEnum,
        DAY: 'DOWNLOADEDKB' as AlignedEnum,
        MONTH: 'UPLOADEDKB' as AlignedEnum,
        YEAR: 'UPLOADEDREFS' as AlignedEnum
    };
}

我正在考虑使用任何一种map,但我不太清楚如何使用。

let quotes: Array<Quote>;
let alignedQuotes: Array<AlignedQuotes> = quotes.map(???).reduce(????);

例子:

quotes: [{
  chronoUnit:ChronoUnit.HOUR,
  downloadedDocs:1,
  downloadedKb:23,
  uploadedKb:65,
  uploadedRefs:7
}];

alignedQuotes: [ 
  {alignedType: AlignedQuote.AlignedEnum.DOWNLOADEDDOCS, hour: 1, day: null, month: null, year: null},
  {alignedType: AlignedQuote.AlignedEnum.DOWNLOADEDKBS, hour: 23, day: null, month: null, year: null},
  {alignedType: AlignedQuote.AlignedEnum.UPLOADEDKBS, hour: 65, day: null, month: null, year: null},
  {alignedType: AlignedQuote.AlignedEnum.UPLOADEDREFS, hour: 7, day: null, month: null, year: null}
]

有任何想法吗?

标签: typescript

解决方案


我不确定您的两个对象究竟是如何相关的,但您可以在此处查看 Array.Map() 如何与基本示例一起使用。这是一个函数,你可以在括号内做任何你需要的事情

点击

您的情况的可能解决方案:

let alignedQuotes: Array<AlignedQuotes> = quotes.map(quote => <AlignedQuotes>{ 
     hour: quote.downloadedDocs,
     day: null, 
     month: null, 
     year: null
});

quote这是单个 Quote obj(.map 遍历所有这些),您可以在需要时使用他的属性,例如“小时”示例。


推荐阅读