Javascript 有没有有效的方法将数据设置为MapObject?

Javascript 有没有有效的方法将数据设置为MapObject?,javascript,reactjs,typescript,algorithm,Javascript,Reactjs,Typescript,Algorithm,我想重新制作一个数组并对其排序。 可以用“reduce”代替“forEach”或“map”吗? 返回beeProps.valueInfos.reduce(reduce())将非常好 [Date,Onject]-->[Number,Object]--我想将相同的“Number”对象添加到数组中-->[Number,Object[]] 我相信这里的人都很聪明。。。有人能找到一个好办法 //Sample IO type Info = { title: string; InfoM

我想重新制作一个数组并对其排序。 可以用“reduce”代替“forEach”或“map”吗? 返回beeProps.valueInfos.reduce(reduce())将非常好

[Date,Onject]-->[Number,Object]--我想将相同的“Number”对象添加到数组中-->[Number,Object[]]

我相信这里的人都很聪明。。。有人能找到一个好办法


//Sample IO

  type Info = {
    title: string;
    InfoMap: Map<Date, Slot>; 
  };

  type Slot =
  | {
      kind: "on";
    }
  | {
      kind: "off";
    };

    let date1 = new Date(1999, 11, 31, 20);        
    let date2 = new Date(1999, 11, 31, 21);        
    let date3 = new Date(1999, 11, 31, 22); 
    let date4 = new Date(1999, 11, 31, 23);  

    const sampleInfoDetailMap:Map<Date, Slot> = new Map();
    sampleInfoDetailMap.set(date1,{kind: 'on' as const})
    sampleInfoDetailMap.set(date2,{kind: 'on' as const})
    sampleInfoDetailMap.set(date3,{kind: 'off' as const})
    sampleInfoDetailMap.set(date4,{kind: 'on' as const})

    const sampleInfoDetailMap2:Map<Date, Slot> = new Map();
    sampleInfoDetailMap2.set(date1,{kind: 'on' as const})
    sampleInfoDetailMap2.set(date2,{kind: 'off' as const})
    sampleInfoDetailMap2.set(date3,{kind: 'off' as const})
    sampleInfoDetailMap2.set(date4,{kind: 'on' as const})

    console.log(date1.getTime());
    console.log(date2.getTime());
   let sampleInfo:Info = {title:"test1"  ,InfoMap:sampleInfoDetailMap}
   let sampleInfo2:Info = {title:"test2"  ,InfoMap:sampleInfoDetailMap2}
   let info:Info[] = new Array();

    //ideal Output is 
    //numer => Date.getTime() : number;
    //Map<number,Slot[]>
    const idealResult:Map<number,Slot[]> = new Map();

   //[946638000000 , [on,on]
    //[946641600000 , [on,off]
//note: 946638000000 is 1999, 11, 31, 20. 946641600000 is 1999, 11, 31, 21

//样本IO
类型信息={
标题:字符串;
信息地图:地图;
};
类型槽=
| {
种类:“开”;
}
| {
种类:“关”;
};
let date1=新日期(1999,11,31,20);
let date2=新日期(1999年11月31日21日);
let date3=新日期(1999年11月31日22日);
let date4=新日期(1999年11月31日23日);
const sampleInfoDetailMap:Map=newmap();
sampleInfoDetailMap.set(date1,{kind:'on'as const})
sampleInfoDetailMap.set(date2,{kind:'on'as const})
sampleInfoDetailMap.set(date3,{kind:'off'as const})
sampleInfoDetailMap.set(date4,{kind:'on'as const})
const sampleInfoDetailMap2:Map=newmap();
sampleInfoDetailMap2.set(date1,{kind:'on'as const})
sampleInfoDetailMap2.set(date2,{kind:'off'as const})
sampleInfoDetailMap2.set(date3,{kind:'off'as const})
sampleInfoDetailMap2.set(date4,{kind:'on'as const})
log(date1.getTime());
log(date2.getTime());
让sampleInfo:Info={title:“test1”,InfoMap:sampleInfoDetailMap}
让sampleInfo2:Info={title:“test2”,InfoMap:sampleInfoDetailMap2}
let info:info[]=新数组();
//理想的输出是
//numer=>Date.getTime():number;
//地图
const idealResult:Map=new Map();
//[946638000000,[on,on]
//[946641600000[开,关]
//注:946638000000是1999,11,31,20。946641600000是1999,11,31,21

由于示例代码似乎没有指定特定的输入和输出,因此我无法从您的问题中准确判断您在寻找什么。请告诉我以下内容是否适用于您:

const mapKeyMaps = <KI, KO, V>(
    keyMapper: (ki: KI) => KO,
    ...inputMaps: Map<KI, V>[]
): Map<KO, V[]> =>
    ([] as Array<[KI, V]>).concat(...inputMaps.map(m => Array.from(m.entries())))
        .map(([ki, v]) => [keyMapper(ki), v] as const)
        .reduce(
            (acc, [ko, v]) => ((acc.get(ko) || (acc.set(ko, []), acc.get(ko)!)).push(v), acc),
            new Map<KO, V[]>()
        );
如果这对你有效,我将解释
mapKeyMaps()
的工作原理。如果不行,请编辑你问题中的代码以构成一个,也许我可以提供一个更好的解决方案。不管怎样,祝你好运


你能用样本输出发布样本输入吗?我将准备样本I/o。但是,我想知道的是,这是可能的还是不可能的…以及验证。无法回答bc,不清楚你在追求什么。这就是为什么我想看到样本输入和输出我添加了样本。请检查它。
let info: Info[] = [sampleInfo, sampleInfo2];
const idealResult = mapKeyMaps((date) => date.getTime(), ...info.map(i => i.InfoMap))
console.log(JSON.stringify(Array.from(idealResult.entries())));
/*
[
    [946688400000,[{"kind":"on"},{"kind":"on"}]],
    [946692000000,[{"kind":"on"},{"kind":"off"}]],
    [946695600000,[{"kind":"off"},{"kind":"off"}]],
    [946699200000,[{"kind":"on"},{"kind":"on"}]]
]
*/