Сохранить уникальные значения двух свойств из массива объектов в один массив - PullRequest
1 голос
/ 22 мая 2019

Как получить уникальные значения requestterPractitionerId и performerOrganizationId. Мне нужно обработать уникальные значения requestterPractitionerId & performerOrganizationId в одном массиве.

[ 
    { 
        id: '1043120',
        requesterPractitionerId: '1043119',
    },
    { 
        id: '1043081',
        requesterPractitionerId: '1043080'
    },
    { 
        id: 'e1dceebe-c5ba-46a5-a63a-bff709896af4',
        requesterPractitionerId: 'e0a844e4-6c8a-489a-8bd6-1d62267d311e',
        performerOrganizationId: '05D0889009',
    },
    { 
        id: '2709842f-41e3-4193-8607-fc34d3d24ec1',
        requesterPractitionerId: 'e0a844e4-6c8a-489a-8bd6-1d62267d311e',
        performerOrganizationId: '05D0889009'
    } 
]

Ожидаемый результат:

1043119
1043080
e0a844e4-6c8a-489a-8bd6-1d62267d311e
05D0889009

Я новичок в Javascript и борюсь с этим пару часов. Любая помощь будет по-настоящему оценена.

Ответы [ 4 ]

2 голосов
/ 22 мая 2019

Использование Установка , Array.reduce и Array.from

  • Используйте reduce, чтобы создать набор с уникальными значениями указанных полей
  • Затем преобразовать набор в массив, используя Array.from

let arr = [{id:'1043120',requesterPractitionerId:'1043119'},{id:'1043081',requesterPractitionerId:'1043080'},{id:'e1dceebe-c5ba-46a5-a63a-bff709896af4',requesterPractitionerId:'e0a844e4-6c8a-489a-8bd6-1d62267d311e',performerOrganizationId:'05D0889009'},{id:'2709842f-41e3-4193-8607-fc34d3d24ec1',requesterPractitionerId:'e0a844e4-6c8a-489a-8bd6-1d62267d311e',performerOrganizationId:'05D0889009'}];

let result = Array.from(arr.reduce((a,c) => {
  if(c.requesterPractitionerId) a.add(c.requesterPractitionerId);
  if(c.performerOrganizationId) a.add(c.performerOrganizationId);
  return a;
}, new Set()));

console.log(result);
1 голос
/ 22 мая 2019

Одним из решений является использование Array.reduce () для генерации нового набора из необходимых вам свойств. После этого вы можете spread элементы набора внутри массива.

const input = [{id:'1043120',requesterPractitionerId:'1043119'},{id:'1043081',requesterPractitionerId:'1043080'},{id:'e1dceebe-c5ba-46a5-a63a-bff709896af4',requesterPractitionerId:'e0a844e4-6c8a-489a-8bd6-1d62267d311e',performerOrganizationId:'05D0889009',},{id:'2709842f-41e3-4193-8607-fc34d3d24ec1',requesterPractitionerId:'e0a844e4-6c8a-489a-8bd6-1d62267d311e',performerOrganizationId:'05D0889009'}];

let res = input.reduce((acc, o) =>
{
    if (o.hasOwnProperty("requesterPractitionerId"))
        acc.add(o.requesterPractitionerId);

    if (o.hasOwnProperty("performerOrganizationId"))
        acc.add(o.performerOrganizationId);

    return acc;
}, new Set())

console.log([...res]);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
0 голосов
/ 22 мая 2019

Действительно просто - Set и map, reduce и filter:

const arr = [{id:'1043120',requesterPractitionerId:'1043119',},{id:'1043081',requesterPractitionerId:'1043080'},{id:'e1dceebe-c5ba-46a5-a63a-bff709896af4',requesterPractitionerId:'e0a844e4-6c8a-489a-8bd6-1d62267d311e',performerOrganizationId:'05D0889009',},{id:'2709842f-41e3-4193-8607-fc34d3d24ec1',requesterPractitionerId:'e0a844e4-6c8a-489a-8bd6-1d62267d311e',performerOrganizationId:'05D0889009'}];
const res = [...new Set(arr.map(({ requesterPractitionerId, performerOrganizationId }) => [requesterPractitionerId, performerOrganizationId]).reduce((acc, curr) => acc.concat(curr)).filter(Boolean))];
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
0 голосов
/ 22 мая 2019

Вы можете использовать forEach для итерации data, а затем использовать Set для удаления дубликатов

let data = [{
    id: '1043120',
    requesterPractitionerId: '1043119',
  },
  {
    id: '1043081',
    requesterPractitionerId: '1043080'
  },
  {
    id: 'e1dceebe-c5ba-46a5-a63a-bff709896af4',
    requesterPractitionerId: 'e0a844e4-6c8a-489a-8bd6-1d62267d311e',
    performerOrganizationId: '05D0889009',
  },
  {
    id: '2709842f-41e3-4193-8607-fc34d3d24ec1',
    requesterPractitionerId: 'e0a844e4-6c8a-489a-8bd6-1d62267d311e',
    performerOrganizationId: '05D0889009'
  }
]


let newArry = [];
data.forEach(function(item) {
  newArry.push(item.requesterPractitionerId);
  if (item.hasOwnProperty('performerOrganizationId')) {
    newArry.push(item.performerOrganizationId)
  }
})

let k = Array.from(new Set(newArry));

console.log(k)
...