Сравнение хэш таблиц
есть 2 хэш таблицы, состояния за вчера и за сегодня, допускаем, что есть некоторые изменения значений, удаление и добавление новых элементов, как правильно сравнить две такие таблицы, чтобы результат выглядел:
1) список изменившихся элементов
2) список новых элементов
3) список удаленных элементов
Пример:
let hash1 = {
"https:/vk.com" : "Любая информация",
"https:/twitch.tv" : "Любая информация1",
"https:/youtube.com" : "Любая информация 3"
}
let hash2 = {
"https:/vk.com" : "Любая информация 1",
"https:/youtube.com" : "Любое инфо",
"https:/stackoverflow.com", "Любая информация 2"
}
Вот две таблички, на выход хочу получить:
Изменено: Vk.com, Youtube.com,
Удалено: Twitch.tv,
Добавлено: stackoverflow.com
Ответы (1 шт):
Автор решения: WVFFLIFE
→ Ссылка
let obj1 = {
"https:/vk.com": "Любая информация",
"https:/twitch.tv": "Любая информация1",
"https:/youtube.com": "Любая информация 3"
};
let obj2 = {
"https:/vk.com": "Любая информация 1",
"https:/youtube.com": "Любое инфо",
"https:/stackoverflow.com": "Любая информация 2"
}
function checkHash(hash1, hash2) {
let res = {
changed: [],
added: [],
deleted: []
};
const hash1Keys = Object.keys(hash1).sort();
const hash2Keys = Object.keys(hash2).sort();
if (hash1Keys.join('') !== hash2Keys.join('')) {
res = {
...res,
deleted: [
...res.deleted,
hash1Keys.find(item => !hash2Keys.includes(item))
]
}
}
return hash2Keys.reduce((acc, key) => {
return !(key in hash1) ? { ...acc,
added: [...acc.added, key]
} :
(hash2[key] !== hash1[key]) ? { ...acc,
changed: [...acc.changed, key]
} : acc;
}, res);
}
const result = checkHash(obj1, obj2);
console.log(`Изменено: ${result.changed.join(', ')}; Удалено: ${result.deleted.join(', ')}; Добавлено: ${result.added.join(', ')}`)