Вы можете использовать Object.entries()
, Array.reduce()
и String.replace()
, чтобы сделать это.
Повторять записи вобъект A, для каждой записи, проверьте, есть ли запись в B. Если нет, поместите значение в массив.Если есть запись и номера версий одинаковы, ничего не делайте, в противном случае отправьте ее и в массив.
Для сравнения номеров версий вы можете использовать регулярное выражение (/^\^|~/
) для удалениясначала ^
или ~
перед сравнением значений.
const A = {
"a" : "3.1.2",
"b" : "4.1.1",
"c" : "3.0.0",
"y" : "5.0.0"
};
const B = {
"a" : "^3.1.2",
"t" : "^4.1.1",
"c" : "~2.2.2"
};
const result = Object.entries(A).reduce((acc, [key, val]) => {
const bEntry = B[key] && B[key].replace(/^\^|~/, '');
return bEntry !== val ? [...acc, `${key}@${val}`] : acc;
}, []);
console.log(result);