1*5500cea7S猫头猫interface IIndexMap { 2*5500cea7S猫头猫 getIndexMap: () => Record<string, Record<string, number>>; 3*5500cea7S猫头猫 getIndex: (musicItem: IMusic.IMusicItem) => number; 4*5500cea7S猫头猫 has: (mediaItem: IMusic.IMusicItem) => boolean; 5*5500cea7S猫头猫} 6*5500cea7S猫头猫 7*5500cea7S猫头猫export function createMediaIndexMap( 8*5500cea7S猫头猫 musicItems: IMusic.IMusicItem[], 9*5500cea7S猫头猫): IIndexMap { 10*5500cea7S猫头猫 const indexMap: Record<string, Record<string, number>> = {}; 11*5500cea7S猫头猫 12*5500cea7S猫头猫 musicItems.forEach((item, index) => { 13*5500cea7S猫头猫 // 映射中不存在 14*5500cea7S猫头猫 if (!indexMap[item.platform]) { 15*5500cea7S猫头猫 indexMap[item.platform] = { 16*5500cea7S猫头猫 [item.id]: index, 17*5500cea7S猫头猫 }; 18*5500cea7S猫头猫 } else { 19*5500cea7S猫头猫 // 修改映射 20*5500cea7S猫头猫 indexMap[item.platform][item.id] = index; 21*5500cea7S猫头猫 } 22*5500cea7S猫头猫 }); 23*5500cea7S猫头猫 24*5500cea7S猫头猫 function getIndexMap() { 25*5500cea7S猫头猫 return indexMap; 26*5500cea7S猫头猫 } 27*5500cea7S猫头猫 28*5500cea7S猫头猫 function getIndex(musicItem: IMusic.IMusicItem) { 29*5500cea7S猫头猫 if (!musicItem) { 30*5500cea7S猫头猫 return -1; 31*5500cea7S猫头猫 } 32*5500cea7S猫头猫 return indexMap[musicItem.platform]?.[musicItem.id] ?? -1; 33*5500cea7S猫头猫 } 34*5500cea7S猫头猫 35*5500cea7S猫头猫 function has(musicItem: IMusic.IMusicItem) { 36*5500cea7S猫头猫 if (!musicItem) { 37*5500cea7S猫头猫 return false; 38*5500cea7S猫头猫 } 39*5500cea7S猫头猫 40*5500cea7S猫头猫 return indexMap[musicItem.platform]?.[musicItem.id] > -1; 41*5500cea7S猫头猫 } 42*5500cea7S猫头猫 43*5500cea7S猫头猫 return { 44*5500cea7S猫头猫 getIndexMap, 45*5500cea7S猫头猫 getIndex, 46*5500cea7S猫头猫 has, 47*5500cea7S猫头猫 }; 48*5500cea7S猫头猫} 49