Я хочу устранить повторяющиеся данные, сравнив две информации в двух массивах.
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;
}
}
}
Мой код много много не чистый код..
Я хочу чистый код.
Мне нужен короткий номер.
извините, я запустил переводчик. Мне любопытен ваш чистый код.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать 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);Ух ты! Вот как они используют фильтр~ Спасибо! Я узнал кое-что новое!!
@HyoD.k, я снова обновил ответ, используя filter и some
Ох ох!! некоторые очень-очень удивительные! Спасибо!!! Я буду изучать некоторые!
Вы можете найти разницу между двумя списками, сначала выяснив, как вы хотите сериализовать свои данные. Как только вы выясните это, вы можете использовать эту функцию для кэширования ваших элементов для сравнения наборов.
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 Я исправил вывод, я изменил его на !cache.has...
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);УХ ТЫ! Набор..! Это потрясающе, потому что это технология, которую я никогда раньше не использовал! Спасибо. Вы очень помогли!
Вы можете использовать сокращение, чтобы сделать это более чистым способом.
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);
извини. Я разместил неправильный пример. Другой контент отличается, и я хочу убедиться, что workcenterId и processId совпадают.