Два массива JavaScript в дедупликации объектов

Я хочу устранить повторяющиеся данные, сравнив две информации в двух массивах.

const dataList = [
  { id: 1, name: "Kim", workcenterId: "workcenter0001", processId: "process0001" },
  { id: 2, name: "Lee", workcenterId: "workcenter0002", processId: "process0002" },
  { id: 3, name: "ji",  workcenterId: "workcenter0003", processId: "process0003" },
  { id: 4, name: "cho", workcenterId: "workcenter0004", processId: "process0004" },
];
const paramsList = [
  { id: 5, name: "kaka", workcenterId: "workcenter0001", processId: "process0001" },
  { id: 6, name: "eses", workcenterId: "workcenter0002", processId: "process0002" },
];

let result = [];
for (let i = 0; i < dataList.length; i++) {
  result.push(dataList[i]);
  for (let j = 0; j < paramsList.length; j++) {
    if (dataList[i].workcenterId === paramsList[j].workcenterId &&
        dataList[i].processId === paramsList[j].processId) {
      result.pop();
      break;
    }
  }
}

Мой код много много не чистый код..

Я хочу чистый код.

Мне нужен короткий номер.

извините, я запустил переводчик. Мне любопытен ваш чистый код.

Поведение ключевого слова "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
0
844
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете использовать Array.some и Array.filter, чтобы получить желаемый окончательный результат.

    const dataList = [
      { id: 1, name: "Kim", workcenterId: "workcenter0001", processId: "process0001" },
      { id: 2, name: "Lee", workcenterId: "workcenter0002", processId: "process0002" },
      { id: 3, name: "ji",  workcenterId: "workcenter0003", processId: "process0003" },
      { id: 4, name: "cho", workcenterId: "workcenter0004", processId: "process0004" },
    ];
    const paramsList = [
      { id: 5, name: "kaka", workcenterId: "workcenter0001", processId: "process0001" },
      { id: 6, name: "eses", workcenterId: "workcenter0002", processId: "process0002" },
    ];
    const result = dataList.filter(dataItem => {
      return !paramsList.some(paramsItem => paramsItem.processId === dataItem.processId && paramsItem.workcenterId === dataItem.workcenterId)
    });
    console.info(result);

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

HyoD.k 14.12.2020 14:11

Ух ты! Вот как они используют фильтр~ Спасибо! Я узнал кое-что новое!!

HyoD.k 14.12.2020 14:24

@HyoD.k, я снова обновил ответ, используя filter и some

Prime 14.12.2020 14:25

Ох ох!! некоторые очень-очень удивительные! Спасибо!!! Я буду изучать некоторые!

HyoD.k 14.12.2020 14:36

Вы можете найти разницу между двумя списками, сначала выяснив, как вы хотите сериализовать свои данные. Как только вы выясните это, вы можете использовать эту функцию для кэширования ваших элементов для сравнения наборов.

const difference = (src, ref, serializeFn) =>
  (cache => src.filter(item =>
    !cache.has(serializeFn(item))))
  (new Set(paramsList.map(item => serializeFn(item))));

const serializeFn = ({id, name, workcenterId, processId }) =>
  JSON.stringify({id, name, workcenterId, processId });

const dataList = [
  { id: 1, name: "Kim", workcenterId: "workcenter0001", processId: "processId" },
  { id: 2, name: "Lee", workcenterId: "workcenter0002", processId: "processId" },
  { id: 3, name: "ji",  workcenterId: "workcenter0003", processId: "processId" },
  { id: 4, name: "cho", workcenterId: "workcenter0004", processId: "processId" },
];
const paramsList = [
  { id: 1, name: "Kim", workcenterId: "workcenter0001", processId: "processId" },
  { id: 2, name: "Lee", workcenterId: "workcenter0002", processId: "processId" },
];

console.info(difference(dataList, paramsList, serializeFn));
.as-console-wrapper { top: 0; max-height: 100% !important; }

Вау... ты мастер! Мне пока сложно понять...😂😂 куплю буду учиться! Спасибо!

HyoD.k 14.12.2020 14:41

@HyoD.k Я исправил вывод, я изменил его на !cache.has...

Mr. Polywhirl 14.12.2020 17:32

const dataList = [
  { id: 1, name: "Kim", workcenterId: "workcenter0001", processId: "process0001" },
  { id: 2, name: "Lee", workcenterId: "workcenter0002", processId: "process0002" },
  { id: 3, name: "ji",  workcenterId: "workcenter0003", processId: "process0003" },
  { id: 4, name: "cho", workcenterId: "workcenter0004", processId: "process0004" },
];
const paramsList = [
  { id: 5, name: "kaka", workcenterId: "workcenter0001", processId: "process0001" },
  { id: 6, name: "eses", workcenterId: "workcenter0002", processId: "process0002" },
];

let result = dataList.filter(item => {
  return !paramsList.some(other => other.workcenterId === item.workcenterId 
    && other.processId === item.processId)
});

console.info(result);

или другой подход:

const dataList = [
  { id: 1, name: "Kim", workcenterId: "workcenter0001", processId: "process0001" },
  { id: 2, name: "Lee", workcenterId: "workcenter0002", processId: "process0002" },
  { id: 3, name: "ji",  workcenterId: "workcenter0003", processId: "process0003" },
  { id: 4, name: "cho", workcenterId: "workcenter0004", processId: "process0004" },
];
const paramsList = [
  { id: 5, name: "kaka", workcenterId: "workcenter0001", processId: "process0001" },
  { id: 6, name: "eses", workcenterId: "workcenter0002", processId: "process0002" },
];

const keysToRemove = new Set(paramsList.map(({workcenterId, processId}) => `${workcenterId};${processId}`));
let result = dataList.filter(({workcenterId, processId}) => !keysToRemove.has(`${workcenterId};${processId}`));

console.info(result);

УХ ТЫ! Набор..! Это потрясающе, потому что это технология, которую я никогда раньше не использовал! Спасибо. Вы очень помогли!

HyoD.k 14.12.2020 14:39

Вы можете использовать сокращение, чтобы сделать это более чистым способом.

const dataList = [
  { id: 1, name: "Kim", workcenterId: "workcenter0001", processId: "process0001" },
  { id: 2, name: "Lee", workcenterId: "workcenter0002", processId: "process0002" },
  { id: 3, name: "ji",  workcenterId: "workcenter0003", processId: "process0003" },
  { id: 4, name: "cho", workcenterId: "workcenter0004", processId: "process0004" },
];
const paramsList = [
  { id: 5, name: "kaka", workcenterId: "workcenter0001", processId: "process0001" },
  { id: 6, name: "eses", workcenterId: "workcenter0002", processId: "process0002" },
];

const result = dataList.reduce((acc, curr) => {
   const index = paramsList.findIndex(item => item.workcenterId === curr.workcenterId && item.processId === curr.processId);
   index === -1 && acc.push(curr);
   return acc;
}, []);

console.info(result);

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

Использование массива в качестве входных данных для функции в Haskell
Невозможно получить доступ к данным внутри массива объектов PHP
Получить массив из другого класса и показать его закусочной
Программирование на C — генерация случайных чисел в новый текстовый файл и извлечение их для подсчета вхождений (затем сделайте статистику сбоку)
Как отправить данные из представления на контроллер laravel с помощью ajax?
Найти и вывести элементы в массиве (1), не перечисленные в массиве (2) в PHP
Как получить первый символ всех значений из массива numpy (в форме (n, m)), заполненного строками
Как я могу исправить это [Ошибка] не может преобразовать 'float [6]' в float в назначении
С++: у меня есть два массива, в которых первый и последний элементы имеют одинаковый адрес памяти
Получить выбранные строки на основе имен столбцов (многомерный массив): Javascript