Задать вопрос
@iharaleynikov

Как правильно написать форматтер для древовидной структуры?

Есть функция которая принимает на вход два объекта и сравнивает их:

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 plain = (diff) => {
  const formatting = diff.map(obj => {
    if (obj.status === 'have a child') {
          
    } else if (obj.status === 'changed') {
      console.log(`Property '${obj.key}' was updated. From ${obj.value.oldValue} to ${obj.value.newValue}`);
    } else if (obj.status === 'removed') {
      console.log(`Property '${obj.key}' was removed`);
    } else if (obj.status === 'new') {
      console.log(`Property '${obj.key}' was added with value: '${obj.value}'`);
    }
  });

  return formatting;
};

Как сделать так, чтобы форматтер работал и на древовидные струкруры?
  • Вопрос задан
  • 59 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

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

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