Я пытаюсь сгладить массив и удалить дубликаты за один шаг, используя reduce
и Set
, но массив выравнивается, но дубликаты остаются.
Связанный ответ говорит об удалении дубликатов из массива, но я хотел бы сгладить и удалить дубликаты за один шаг, поэтому я бы предположил, что это не может быть повторяющимся вопросом.
const wells = [
[{
id: 1,
name: 'well one'
},
{
id: 2,
name: 'well two'
},
{
id: 3,
name: 'well three'
},
],
[{
id: 2,
name: 'well two'
},
{
id: 3,
name: 'well three'
},
{
id: 4,
name: 'well four'
},
],
];
const uniqueflattenedWells = wells.reduce(
(a, b) => Array.from(new Set(a.concat(b))), [],
);
console.info(uniqueflattenedWells)
Я отредактировал вопрос, чтобы его снова открыли, поскольку в предложенном ответе говорится об удалении дубликатов, но я хотел бы сгладить и удалить дубликаты за один шаг. так что надеюсь его откроют
Объекты равны только тогда, когда они являются одной и той же ссылкой. Один из способов решить эту проблему — использовать JSON.stringify
для сравнения объектов, но учтите, что это не самый быстрый метод.
const wells = [
[{
id: 1,
name: 'well one'
},
{
id: 2,
name: 'well two'
},
{
id: 3,
name: 'well three'
},
],
[{
id: 2,
name: 'well two'
},
{
id: 3,
name: 'well three'
},
{
id: 4,
name: 'well four'
},
],
];
const uniqueflattenedWells = ((set) => wells.reduce((a,b)=>a.concat(b), []).filter(obj => {
const str = JSON.stringify(obj);
return !set.has(str) && set.add(str);
})
)(new Set);
console.info(uniqueflattenedWells)
Вы можете использовать фильтр и каждые, если идентификаторы в порядке, чтобы определить, дублируются ли элементы:
const wells = [[{"id":1,"name":"well one"},{"id":2,"name":"well two"},{"id":3,"name":"well three"}],[{"id":2,"name":"well two"},{"id":3,"name":"well three"},{"id":4,"name":"well four"}]];
const uniqueflattenedWells = wells.reduce(
(a, b) => a.concat(b.filter(o => a.every(x => x.id !== o.id))),
[],
);
console.info(uniqueflattenedWells)
Примечание. Этот метод не будет выполнять дедупликацию элементов, поступающих из одного и того же внутреннего массива.
Объекты не связаны
===
друг с другом, поэтому набор не будет дублироваться.