Объединить два массива в один в TypeScript - PullRequest
0 голосов
/ 28 августа 2018

Я хочу объединить два массива в один в TypeScript.

Первый объект Array:

export interface Item{
    Label : string,
    Code : string,
    Price : number,
}

Второй объект Array:

export interface Amount
{
     Code :  string,
     Amount: number
}

Объект массива результата:

export interface CombinedList{
    Code : string,
    ItemAmount : number,
    ItemPrice : number
}

В массиве результатов я хочу объединить массив Item и массив Amount по коду. (In Item and Amount - это 3 элемента с одинаковым кодом).

Пример:

ItemsArray : Item[] = 
[{ Label : "One", Code : "ONE", Price : 5,86}, 
{Label : "Two", Code : "TWO", Price : 9,99}, 
{Label : "Three", Code : "THR", Price : 752}]

AmountsArray : Amount[] = 
[{ Code : "ONE", Amount : 120}, 
{Code :"TWO", Amount : 250}, 
{Code :"THR", Amount : 165}]

И результат:

CombinedArray : CombinedList[] = 
[{Code : "ONE", ItemAmount : 120, ItemPrice: 5,86 }, 
{Code :"TWO", ItemAmount : 250, ItemPrice: 9,99}, 
{Code :"THR", ItemAmount : 165, ItemPrice: 752}]

1 Ответ

0 голосов
/ 28 августа 2018

Как бы я это сделал:

Сначала уменьшите суммы до пары ключ / значение, где ключ - это код, а значение - это сумма. Таким образом, вы можете быстро найти суммы по коду:

const amountsByCode = AmountsArray.reduce((byCode, amount) => { byCode[amount.Code] = amount; return byCode; }, {} as { [key: string]: Amount });

2-й шаг - сопоставить элементы и добавить пропущенные поля:

const CombinedArray = ItemsArray.map(item => ({ Code: item.Code, ItemAmount: amountsByCode[item.Code].Amount, ItemPrice: item.Price }));

Если массивы всегда упорядочены (код в код), вы можете напрямую сжать их:

const CombinedArray = ItemsArray.map((item, index) => ({ Code: item.Code, ItemAmount: amounts[index].Amount, ItemPrice: item.Price }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...