Помогите остартировать массив объектов по уникальному ключу

Есть такое массив с объектами:

const myArray = [
   {
       "d": "16/07/2021",
       "num": "с462та777",
       "ccp": 99,
       "ccap": 33,
       "la": "",
       "v": 84.46,
       "cc": 102,
       "ca": 33,
       "vp": 84.46,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 1,
       "mil": 0,
       "milPlan": 2975.0557031249978,
       "wbArray": [
           1
       ]
   },
   {
       "d": "21/07/2021",
       "num": "с462та777",
       "ccp": 101,
       "ccap": 35,
       "la": "",
       "v": 86.06,
       "cc": 101,
       "ca": 35,
       "vp": 86.06,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 2,
       "mil": 0,
       "milPlan": 3155.4110546874986,
       "wbArray": [
           2
       ]
   },
   {
       "d": "16/08/2021",
       "num": "с462та777",
       "ccp": 120,
       "ccap": 41,
       "la": "",
       "v": 101.55999999999997,
       "cc": 120,
       "ca": 41,
       "vp": 101.55999999999997,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 4,
       "mil": 1276.9999999999993,
       "milPlan": 4372.354671874999,
       "wbArray": [
           4
       ]
   },
   {
       "d": "16/08/2021",
       "num": "NissanAlmera 822 МОХ 777",
       "ccp": 114,
       "ccap": 40,
       "la": "",
       "v": 96.75999999999998,
       "cc": 114,
       "ca": 40,
       "vp": 96.75999999999998,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 5,
       "mil": 63.8,
       "milPlan": 4147.6281249999965,
       "wbArray": [
           5
       ]
   },
   {
       "d": "17/08/2021",
       "num": "с462та777",
       "ccp": 105,
       "ccap": 35,
       "la": "",
       "v": 73.96,
       "cc": 99,
       "ca": 35,
       "vp": 89.25999999999998,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 6,
       "mil": 3390.7999999999975,
       "milPlan": 3628.663554687503,
       "wbArray": [
           6
       ]
   },
   {
       "d": "18/08/2021",
       "num": "с462та777",
       "ccp": 88,
       "ccap": 37,
       "la": "",
       "v": 67.135,
       "cc": 98,
       "ca": 37,
       "vp": 75.66,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 8,
       "mil": 1780.5,
       "milPlan": 3844.6405156250034,
       "wbArray": [
           8
       ]
   },
   {
       "d": "19/08/2021",
       "num": "с462та777",
       "ccp": 86,
       "ccap": 36,
       "la": "",
       "v": 48.835,
       "cc": 62,
       "ca": 26,
       "vp": 74.36,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 9,
       "mil": 1145.0000000000045,
       "milPlan": 3723.9373125000034,
       "wbArray": [
           9
       ]
   },
   {
       "d": "20/08/2021",
       "num": "с462та777",
       "ccp": 88,
       "ccap": 37,
       "la": "",
       "v": 75.66,
       "cc": 88,
       "ca": 37,
       "vp": 75.66,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 10,
       "mil": 1690.1000000000004,
       "milPlan": 3844.6405156250034,
       "wbArray": [
           10
       ]
   },
   {
       "d": "24/08/2021",
       "num": "102 ЕУМ799",
       "ccp": 83,
       "ccap": 34,
       "la": "",
       "v": 4.475,
       "cc": 7,
       "ca": 8,
       "vp": 71.66,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 11,
       "mil": 252,
       "milPlan": 3546.771093749998,
       "wbArray": [
           11
       ]
   },
   {
       "d": "02/09/2021",
       "num": "с462та777",
       "ccp": 86,
       "ccap": 36,
       "la": "",
       "v": 0,
       "cc": 0,
       "ca": 6,
       "vp": 74.36,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 15,
       "mil": 4726.000000000002,
       "milPlan": 3887.319656250001,
       "wbArray": [
           15
       ]
   },
   {
       "d": "03/09/2021",
       "num": "033 ОСН 799 GD(У)",
       "ccp": 88,
       "ccap": 37,
       "la": "",
       "v": 75.66,
       "cc": 88,
       "ca": 37,
       "vp": 75.66,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 18,
       "mil": 7245.700000000011,
       "milPlan": 4012.561257812501,
       "wbArray": [
           18
       ]
   },
   {
       "d": "06/09/2021",
       "num": "681 МВК 777 GD(м) в резерве",
       "ccp": 93,
       "ccap": 40,
       "la": "",
       "v": 4.199999999999999,
       "cc": 12,
       "ca": 8,
       "vp": 79.96,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 20,
       "mil": 0,
       "milPlan": 0,
       "wbArray": [
           20
       ]
   },
   {
       "d": "06/09/2021",
       "num": "849 РВА 799 GD(М) в сервисе",
       "ccp": 93,
       "ccap": 40,
       "la": "",
       "v": 0,
       "cc": 2,
       "ca": 5,
       "vp": 79.96,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 21,
       "mil": 0,
       "milPlan": 0,
       "wbArray": [
           21
       ]
   },
   {
       "d": "10/09/2021",
       "num": "с462та777",
       "ccp": 92,
       "ccap": 38,
       "la": "",
       "v": 50.059991000000004,
       "cc": 73,
       "ca": 32,
       "vp": 78.86000000000001,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 22,
       "mil": 4936.499999999971,
       "milPlan": 0,
       "wbArray": [
           22
       ]
   },
   {
       "d": "13/09/2021",
       "num": "с462та777",
       "ccp": 97,
       "ccap": 41,
       "la": "",
       "v": 22.160000000000007,
       "cc": 28,
       "ca": 19,
       "vp": 83.16,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 25,
       "mil": 4539,
       "milPlan": 0,
       "wbArray": [
           25
       ]
   },
   {
       "d": "14/09/2021",
       "num": "033 ОСН 799 GD(У)",
       "ccp": 87,
       "ccap": 35,
       "la": "",
       "v": 3.2,
       "cc": 4,
       "ca": 1,
       "vp": 74.86000000000001,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 26,
       "mil": 3187.500000000001,
       "milPlan": 0,
       "wbArray": [
           26
       ]
   },
   {
       "d": "14/09/2021",
       "num": "с462та777",
       "ccp": 83,
       "ccap": 34,
       "la": "",
       "v": 28.960000000000008,
       "cc": 71,
       "ca": 19,
       "vp": 71.66000000000001,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 27,
       "mil": 4314.6000000000495,
       "milPlan": 0,
       "wbArray": [
           27
       ]
   },
];

И мне нужно оставить в массиве только объекты у которых ключ num, уникальный. Как это можно сделатЬ?


Ответы (2 шт):

Автор решения: rusgeli

Не нашел вопрос, в котором я когда то отвечал на нечто похожее, но вот вариант, как это сделать:

  1. Найти все элементы, у которых свойство num такое же, как у первого элемента
  2. Если их всего 1, добавляем к результирующему массиву
  3. Из исходного убираем все, которые нашли ранее
  4. Повторяем, пока исходный массив не опустеет

let myArray = [
   {
       "d": "16/07/2021",
       "num": "с462та777",
       "ccp": 99,
       "ccap": 33,
       "la": "",
       "v": 84.46,
       "cc": 102,
       "ca": 33,
       "vp": 84.46,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 1,
       "mil": 0,
       "milPlan": 2975.0557031249978,
       "wbArray": [
           1
       ]
   },
   {
       "d": "21/07/2021",
       "num": "с462та777",
       "ccp": 101,
       "ccap": 35,
       "la": "",
       "v": 86.06,
       "cc": 101,
       "ca": 35,
       "vp": 86.06,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 2,
       "mil": 0,
       "milPlan": 3155.4110546874986,
       "wbArray": [
           2
       ]
   },
   {
       "d": "16/08/2021",
       "num": "с462та777",
       "ccp": 120,
       "ccap": 41,
       "la": "",
       "v": 101.55999999999997,
       "cc": 120,
       "ca": 41,
       "vp": 101.55999999999997,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 4,
       "mil": 1276.9999999999993,
       "milPlan": 4372.354671874999,
       "wbArray": [
           4
       ]
   },
   {
       "d": "16/08/2021",
       "num": "NissanAlmera 822 МОХ 777",
       "ccp": 114,
       "ccap": 40,
       "la": "",
       "v": 96.75999999999998,
       "cc": 114,
       "ca": 40,
       "vp": 96.75999999999998,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 5,
       "mil": 63.8,
       "milPlan": 4147.6281249999965,
       "wbArray": [
           5
       ]
   },
   {
       "d": "17/08/2021",
       "num": "с462та777",
       "ccp": 105,
       "ccap": 35,
       "la": "",
       "v": 73.96,
       "cc": 99,
       "ca": 35,
       "vp": 89.25999999999998,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 6,
       "mil": 3390.7999999999975,
       "milPlan": 3628.663554687503,
       "wbArray": [
           6
       ]
   },
   {
       "d": "18/08/2021",
       "num": "с462та777",
       "ccp": 88,
       "ccap": 37,
       "la": "",
       "v": 67.135,
       "cc": 98,
       "ca": 37,
       "vp": 75.66,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 8,
       "mil": 1780.5,
       "milPlan": 3844.6405156250034,
       "wbArray": [
           8
       ]
   },
   {
       "d": "19/08/2021",
       "num": "с462та777",
       "ccp": 86,
       "ccap": 36,
       "la": "",
       "v": 48.835,
       "cc": 62,
       "ca": 26,
       "vp": 74.36,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 9,
       "mil": 1145.0000000000045,
       "milPlan": 3723.9373125000034,
       "wbArray": [
           9
       ]
   },
   {
       "d": "20/08/2021",
       "num": "с462та777",
       "ccp": 88,
       "ccap": 37,
       "la": "",
       "v": 75.66,
       "cc": 88,
       "ca": 37,
       "vp": 75.66,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 10,
       "mil": 1690.1000000000004,
       "milPlan": 3844.6405156250034,
       "wbArray": [
           10
       ]
   },
   {
       "d": "24/08/2021",
       "num": "102 ЕУМ799",
       "ccp": 83,
       "ccap": 34,
       "la": "",
       "v": 4.475,
       "cc": 7,
       "ca": 8,
       "vp": 71.66,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 11,
       "mil": 252,
       "milPlan": 3546.771093749998,
       "wbArray": [
           11
       ]
   },
   {
       "d": "02/09/2021",
       "num": "с462та777",
       "ccp": 86,
       "ccap": 36,
       "la": "",
       "v": 0,
       "cc": 0,
       "ca": 6,
       "vp": 74.36,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 15,
       "mil": 4726.000000000002,
       "milPlan": 3887.319656250001,
       "wbArray": [
           15
       ]
   },
   {
       "d": "03/09/2021",
       "num": "033 ОСН 799 GD(У)",
       "ccp": 88,
       "ccap": 37,
       "la": "",
       "v": 75.66,
       "cc": 88,
       "ca": 37,
       "vp": 75.66,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 18,
       "mil": 7245.700000000011,
       "milPlan": 4012.561257812501,
       "wbArray": [
           18
       ]
   },
   {
       "d": "06/09/2021",
       "num": "681 МВК 777 GD(м) в резерве",
       "ccp": 93,
       "ccap": 40,
       "la": "",
       "v": 4.199999999999999,
       "cc": 12,
       "ca": 8,
       "vp": 79.96,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 20,
       "mil": 0,
       "milPlan": 0,
       "wbArray": [
           20
       ]
   },
   {
       "d": "06/09/2021",
       "num": "849 РВА 799 GD(М) в сервисе",
       "ccp": 93,
       "ccap": 40,
       "la": "",
       "v": 0,
       "cc": 2,
       "ca": 5,
       "vp": 79.96,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 21,
       "mil": 0,
       "milPlan": 0,
       "wbArray": [
           21
       ]
   },
   {
       "d": "10/09/2021",
       "num": "с462та777",
       "ccp": 92,
       "ccap": 38,
       "la": "",
       "v": 50.059991000000004,
       "cc": 73,
       "ca": 32,
       "vp": 78.86000000000001,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 22,
       "mil": 4936.499999999971,
       "milPlan": 0,
       "wbArray": [
           22
       ]
   },
   {
       "d": "13/09/2021",
       "num": "с462та777",
       "ccp": 97,
       "ccap": 41,
       "la": "",
       "v": 22.160000000000007,
       "cc": 28,
       "ca": 19,
       "vp": 83.16,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 25,
       "mil": 4539,
       "milPlan": 0,
       "wbArray": [
           25
       ]
   },
   {
       "d": "14/09/2021",
       "num": "033 ОСН 799 GD(У)",
       "ccp": 87,
       "ccap": 35,
       "la": "",
       "v": 3.2,
       "cc": 4,
       "ca": 1,
       "vp": 74.86000000000001,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 26,
       "mil": 3187.500000000001,
       "milPlan": 0,
       "wbArray": [
           26
       ]
   },
   {
       "d": "14/09/2021",
       "num": "с462та777",
       "ccp": 83,
       "ccap": 34,
       "la": "",
       "v": 28.960000000000008,
       "cc": 71,
       "ca": 19,
       "vp": 71.66000000000001,
       "pickUp": 0,
       "k": 0,
       "t": 0,
       "wbId": 27,
       "mil": 4314.6000000000495,
       "milPlan": 0,
       "wbArray": [
           27
       ]
   },
];

let newArray = [];
while (myArray.length > 0) {
  let num = myArray[0].num; 
  let tempArray = myArray.filter((item, index) => item.num === num);
  if (tempArray.length === 1) {
    newArray = newArray.concat(tempArray);
  } 
  myArray = myArray.filter((item, index) => item.num !== num);
}

console.log(newArray);

→ Ссылка
Автор решения: Roman

Попробуй такой вариант:

function uniqueItems(items) {
  const uniqueElements = {};

  items.forEach((item) => {
    if (!uniqueElements.hasOwnProperty(item.num)) {
      uniqueElements[item.num] = item;
    }
  });

  return Object.values(uniqueElements);
}

console.log(uniqueItems(myArray));
→ Ссылка