Как конвертировать массив в машинописи - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть массив, как показано ниже:

[
{productypeId: 1, producsubtypeId: 1, productid: 1},
{productypeId: 1, producsubtypeId: 1, productid: 2},
{productypeId: 1, producsubtypeId: 2, productid: 3},
{productypeId: 1, producsubtypeId: 2, productid: 4},
{productypeId: 2, producsubtypeId: 5, productid: 6},
{productypeId: 2, producsubtypeId: 5, productid: 7}
]

Я хочу следующий вывод:

[
{productypeId: 1, producsubtypeId: 1, d: '1,2'},
{productypeId: 1, producsubtypeId: 2, d: '3,4'},
{productypeId: 2, producsubtypeId: 5, d: '6,7'}
]

Пожалуйста, помогите мне в этом Спасибо заранее

1 Ответ

1 голос
/ 11 апреля 2020

Что я вижу из вашего вывода, я предполагаю, что вы пытаетесь сделать вывод, который имеет то же значение productypeId, а producsubtypeId присваивает productid как дублирующее значение. Вот мое решение с массивом уменьшить. Надеюсь, что это может решить вашу проблему.

interface InputItem {
  productypeId: number;
  producsubtypeId: number;
  productid: number;
}

interface OuputItem {
  productypeId: number;
  producsubtypeId: number;
  d: string;
}

const input: InputItem[] = [
  { productypeId: 1, producsubtypeId: 1, productid: 1 },
  { productypeId: 1, producsubtypeId: 1, productid: 2 },
  { productypeId: 1, producsubtypeId: 2, productid: 3 },
  { productypeId: 1, producsubtypeId: 2, productid: 4 },
  { productypeId: 2, producsubtypeId: 5, productid: 6 },
  { productypeId: 2, producsubtypeId: 5, productid: 7 }
];

const output = input.reduce((res, item) => {
  // destructuring input item
  const { productypeId, producsubtypeId, productid } = item;

  // find unique set by productypeId and producsubtypeId in accumulator 'res'
  const groupIndex = res.findIndex(
    i =>
      i.productypeId === productypeId && producsubtypeId === i.producsubtypeId
  );

  // if index exist in accumulator, we concat productid value as 'd'
  // else push a new unique set to accumulator
  if (groupIndex > -1) {
    res[groupIndex].d += `,${productid}`;
  } else {
    res.push({ productypeId, producsubtypeId, d: `${productid}` });
  }

  return res;
}, [] as OuputItem[]);

https://stackblitz.com/edit/typescript-2egw3w

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...