Здравствуйте. У меня есть функция, которая выводит различия в объектах:
const gendiff = (file1, file2) => {
const mergeFiles = { ...file1, ...file2 };
const uniqueKeys = Object.keys(mergeFiles);
const diff = uniqueKeys.map(key => {
if (_.has(file1, key) && _.has(file2, key) && typeof file1[key] === 'object' && typeof file2[key] === 'object') {
return { key, value: gendiff(file1[key], file2[key]), status: 'have a child' };
} else if (_.has(file1, key) && _.has(file2, key) && file1[key] !== file2[key]) {
return { key, value: { oldValue: file1[key], newValue: file2[key] }, status: 'changed' };
} else if (_.has(file1, key) && !_.has(file2, key)) {
return { key, value: file1[key], status: 'removed' };
} else if (!_.has(file1, key) && _.has(file2, key)) {
return { key, value: file2[key], status: 'new' };
} else if (_.has(file1, key) && _.has(file2, key) && file1[key] === file2[key]) {
return { key, value: file1[key], status: 'same' };
}
});
return diff;
};
И есть два объекта:
const file1 = {
workshop: {
data: '2.0000000',
locales: 'zh-CN.pak'
}
};
const file2 = {
workshop: {
config: 'd7',
locales: 'am.pak'
}
};
Я хотел чтобы эта функция работала рекурсивно. То есть в первом условии если оба ключа равны и у обоих этих ключей свойства равны объектам то функция запускается внутри себя но в качестве аргументов уже приходят эти свойства ключей, то есть тоже объекты. Вывод я ожидал таким:
[{
key: 'workshop',
value: [
{ key: 'data', value: '2.0000000', status: 'removed' },
{ key: 'config', value: 'd7', status: 'new' },
{ key: 'locales', value: { oldValue: 'zh-CN.pak', newValue: 'am.pak' }, status: 'changed' }
],
status: 'have a child'
}]
А получил такой:
[{
key: 'workshop',
value: { key: 'data', value: '2.0000000', status: 'removed' },
status: 'have a child'
}]
Что я делаю не так?