Как определить Typescript Карта пары значений ключа. где ключ - это число, а значение - массив объектов

В моем приложении angular2 я хочу создать карту, которая принимает число как ключ и возвращает массив объектов. В настоящее время я реализую следующий путь, но не повезло. Как я должен это реализовать или использовать какую-либо другую структуру данных для этой цели? Я хочу использовать карту, потому что, возможно, ее быстро?

Декларация

 private myarray : [{productId : number , price : number , discount : number}];

priceListMap : Map<number, [{productId : number , price : number , discount : number}]> 
= new Map<number, [{productId : number , price : number , discount : number}]>();

Использование

this.myarray.push({productId : 1 , price : 100 , discount : 10});
this.myarray.push({productId : 2 , price : 200 , discount : 20});
this.myarray.push({productId : 3 , price : 300 , discount : 30});
this.priceListMap.set(1 , this.myarray);
this.myarray = null;

this.myarray.push({productId : 1 , price : 400 , discount : 10});
this.myarray.push({productId : 2 , price : 500 , discount : 20});
this.myarray.push({productId : 3 , price : 600 , discount : 30});
this.priceListMap.set(2 , this.myarray);
this.myarray = null;

this.myarray.push({productId : 1 , price : 700 , discount : 10});
this.myarray.push({productId : 2 , price : 800 , discount : 20});
this.myarray.push({productId : 3 , price : 900 , discount : 30});
this.priceListMap.set(3 , this.myarray);
this.myarray = null;

Я хочу получить массив из 3 объектов, если я использую this.priceList.get(1);

Ответы

Ответ 1

Во-первых, определите тип или интерфейс для вашего объекта, это сделает вещи более читаемыми:

type Product = { productId: number; price: number; discount: number };

Вы использовали кортеж размером один вместо массива, он должен выглядеть следующим образом:

let myarray: Product[];
let priceListMap : Map<number, Product[]> = new Map<number, Product[]>();

Итак, теперь это прекрасно работает:

myarray.push({productId : 1 , price : 100 , discount : 10});
myarray.push({productId : 2 , price : 200 , discount : 20});
myarray.push({productId : 3 , price : 300 , discount : 30});
priceListMap.set(1 , this.myarray);
myarray = null;

(код на игровой площадке)