Как сравнить 2 массива объектов с разными ключами?

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

const arrBd = [ {id: '1234' ,  photo_url: 'test.ru/img.jpg ',  parent: 'Общие' ,}, 
{id: '1234567' ,  photo_url: 'test.ru/img.jpg ',  parent: 'Общие' ,}  ]

const arrForSite = [ {sku: '1234' ,  image_url: 'test.ru/img.jpg ',  category: 'Общие' ,}, 
{sku: '1234567' ,  image_url: 'test.ru/img.jpg ',  category: 'Общие' ,} ]
  • Вопрос задан
  • 1171 просмотр
Решения вопроса 2
Можно используя .map() для массива arrForSite переопределить объекты с нужными полями

arrForSiteNEW = arrForSite.map(i=>{
    return {
        id: i.sku,
        photo_url: i.image_url
        parent: i.category
    }
})
Ответ написан
Комментировать
Drilled-prog
@Drilled-prog
Программирую на ['php', 'js']
const isDiff = arrBd.find(
	(item, index) =>
		item.id !== arrForSite[index].sku ||
		item.photo_url !== arrForSite[index].image_url ||
		item.parent !== arrForSite[index].category
);

if(isDiff) {
console.log('Ключи разные');
}


Можно функцию сделать в пару строк

const findDiff = (arr1, arr2, mapping) =>
	arr1.find((item, index) =>
		mapping.find((m) => item[m[0]] !== arr2[index][m[1]])
	);

const diff = findDiff(arrBd, arrForSite, [
	["id", "sku"],
	["photo_url", "image_url"],
	["parent", "category"],
]);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы