grigorev-maksim/frontend-project-46

View on GitHub
src/genDiff.js

Summary

Maintainability
A
30 mins
Test Coverage
A
100%
import _ from 'lodash';

const getKeys = (f1, f2) => _.sortBy(_.uniq(_.union(_.keys(f1), _.keys(f2))));

const diff = (f1, f2) => {
  const keys = getKeys(f1, f2);
  return keys.map((key) => {
    if (!_.has(f2, key)) {
      return { key, value: f1[key], type: 'deleted' };
    }
    if (!_.has(f1, key)) {
      return { key, value: f2[key], type: 'added' };
    }
    if (_.isPlainObject(f1[key]) && _.isPlainObject(f2[key])) {
      return { key, children: diff(f1[key], f2[key]), type: 'nested' };
    }
    if (_.isEqual(f1[key], f2[key])) {
      return { key, value: f1[key], type: 'unchanged' };
    }
    return {
      key, value: f1[key], value2: f2[key], type: 'changed',
    };
  });
};
export default diff;