оставить в массиве объектов только те объекты у которых одинаковый title(JS)
есть объект:
let obj = [
{'title':4, 'content':'world'}
{'title':1, 'content':'hello'},
{'title':1, 'content':'bye'},
{'title':2, 'content':'world'},
{'title':3, 'content':'world'}
];
нужно оставить в массиве только те объекты которые имеют одинаковый title.
то есть должно получиться:
let obj = [
{'title':1, 'content':'hello'},
{'title':1, 'content':'bye'},
];
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Если я правильно понял условия , в голову приходят два способа. Первый на вид проще, но не такой эффективный (совершается много частичных проходов по массиву). Второй чуть сложнее, с промежуточной структурой данных, но должен быть эффективнее, потому что массив перебирается всего два раза.
const obj = [
{'title':4, 'content':'world'},
{'title':1, 'content':'hello'},
{'title':1, 'content':'bye'},
{'title':2, 'content':'world'},
{'title':3, 'content':'world'}
];
// Way 1.
const filtered1 = obj.filter(
(entry1, index1) => obj.some((entry2, index2) =>
entry1.title === entry2.title && index1 !== index2)
);
console.log(filtered1);
// Way 2.
const titleNum = obj.reduce(
(acc, entry) => {
const { title } = entry;
if (acc[title] === undefined) acc[title] = 0;
acc[title]++;
return acc;
}, {}
);
const filtered2 = obj.filter(({ title }) => titleNum[title] > 1);
console.log(filtered2);