Помогите остартировать массив объектов по уникальному ключу
Есть такое массив с объектами:
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
→ Ссылка
Не нашел вопрос, в котором я когда то отвечал на нечто похожее, но вот вариант, как это сделать:
- Найти все элементы, у которых свойство
numтакое же, как у первого элемента - Если их всего 1, добавляем к результирующему массиву
- Из исходного убираем все, которые нашли ранее
- Повторяем, пока исходный массив не опустеет
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));