Создание уникального массива из массива объектов - PullRequest
0 голосов
/ 16 января 2020

Мой объект demoList:

demoList = [
    {
      id: 1,
      validFrom: "2019-06-01T00:00:00",
      validTo: "2020-06-17T00:00:00",
      xxxM: 50,
      xxxN: 2.2,
      xxxQ45: 2,
      xxxQ100: 1.65,
      xxxQ125: null,
      xxxQ150: null,
      xxxQ250: null,
      xxxQ300: null,
      xxxQ500: null
    },
     {
      id: 2,
      validFrom: "2019-06-01T00:00:00",
      validTo: "2020-06-17T00:00:00",
      xxxM: 51,
      xxxN: 22,
      xxxQ45: 1.4,
      xxxQ100: 1.65,
      xxxQ125: null,
      xxxQ150: 1.7,
      xxxQ250: null,
      xxxQ300: 0.15,
      xxxQ500: null,
      xxxQ700: 15.4
    },
   . . .
];

Массив, который я хочу получить:

["M", "N", "45", "100", "150", "300", "700"]

Я хочу получить массив непустых значений, начинающихся с xxx и найденных в список демо-списков. Как мне сделать это, используя angular?

1 Ответ

0 голосов
/ 16 января 2020

Вы можете .flatMap() ваши demoList объекты для Object.entries() каждого объекта. Вы можете сохранить только те записи, которые начинаются с "xxx", а значение не равно null, используя .filter(). Затем вы можете сопоставить каждую клавишу либо с последним номером суффикса клавиши, либо с последним символом клавиши, используя .match(/\d+|\w$/g). Затем вы можете поместить этот сопоставленный массив в new Set(), чтобы удалить любые дубликаты. Затем вы можете распространить ... этот набор в массив для преобразования набора обратно в массив:

const demoList = [{ id: 1, validFrom: "2019-06-01T00:00:00", validTo: "2020-06-17T00:00:00", xxxM: 50, xxxN: 2.2, xxxQ45: 2, xxxQ100: 1.65, xxxQ125: null, xxxQ150: null, xxxQ250: null, xxxQ300: null, xxxQ500: null }, { id: 2, validFrom: "2019-06-01T00:00:00", validTo: "2020-06-17T00:00:00", xxxM: 51, xxxN: 22, xxxQ45: 1.4, xxxQ100: 1.65, xxxQ125: null, xxxQ150: 1.7, xxxQ250: null, xxxQ300: 0.15, xxxQ500: null, xxxQ700: 15.4 } ];

const res = [...new Set(
  demoList.flatMap(Object.entries)
          .filter(([k, v]) => k.startsWith("xxx") && v !== null)
          .map(([k]) => k.match(/\d+|\w$/g).pop())
)];

console.log(res);
...