Javascript сглаживает массив и удаляет дубликаты с уменьшением

Я пытаюсь сгладить массив и удалить дубликаты за один шаг, используя 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)

Объекты не связаны === друг с другом, поэтому набор не будет дублироваться.

CertainPerformance 09.12.2020 18:53

Я отредактировал вопрос, чтобы его снова открыли, поскольку в предложенном ответе говорится об удалении дубликатов, но я хотел бы сгладить и удалить дубликаты за один шаг. так что надеюсь его откроют

Bryan Dellinger 09.12.2020 18:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
699
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Объекты равны только тогда, когда они являются одной и той же ссылкой. Один из способов решить эту проблему — использовать 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)

Примечание. Этот метод не будет выполнять дедупликацию элементов, поступающих из одного и того же внутреннего массива.

Другие вопросы по теме