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

В чём здесь ошибка?

Помогите пожалуйста! Есть такой код:

const file1 = {
  host: 'something.io',
  timeout: 50,
  proxy: '123.234.53.22',
  follow: false,
};

const file2 = {
  timeout: 20,
  verbose: true,
  host: 'something.io'',
};

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)) {
      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' };
    } else if (_.has(file1, key) && _.has(file2, key) && file1[key] !== file2[key]) {
      return  { key, value: { oldValue: file1[key], newValue: file2[key] }, status: 'changed' };
    }
  });
  
  return diff.map(key => {
    if (key.status === 'removed') {
      console.log(`- ${key}: ${key.value}`);
    } else if (key.status === 'new') {
      console.log(`+ ${key}: ${key.value}`);
    } else if (key.status === 'same') {
      console.log(`  ${key}: ${key.value}`);
    } else if (key.status === 'changed') {
      console.log(`- ${key}: ${key.value.oldValue}\n+ ${key}: ${key.value.newValue}`);
    }
  });
};

console.log(genDiff(file1, file2));

Функция genDiff принимает на вход два объекта (file1 и file2) и сравнивает их. Вывод должен был быть такой:

host: something.io
- timeout: 50
+ timeout: 20
- proxy: 123.234.53.22
- follow: false
+ verbose: true

Но в итоге я получаю это:
[object Object]: something.io
- [object Object]: 50
+ [object Object]: 20
- [object Object]: 123.234.53.22
- [object Object]: false
+ [object Object]: true
[ undefined, undefined, undefined, undefined, undefined ]

Что в этом коде не так?
  • Вопрос задан
  • 139 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 2
@MikUrrey
У вас key - объект. Вы его сначала как объект юзаете if (key.status..., а потом в строку вставляете `- ${key}...
Может быть, ${key.key} ?
Ответ написан
sslion
@sslion

const file1 = {
host: 'something.io',
timeout: 50,
proxy: '123.234.53.22',
follow: false,
};

const file2 = {
timeout: 20,
verbose: true,
host: 'something.io',
};

const genDiff = (file1, file2) => {
const mergeFiles = { ...file1, ...file2 };
const uniqueKeys = Object.keys(mergeFiles);
const diff = uniqueKeys.map((key, index, arr) => {
if (file1.hasOwnProperty(key) && !file2.hasOwnProperty(key)) {
return { key, value: file1[key], status: 'removed' };
} else if (!file1.hasOwnProperty(key) && file2.hasOwnProperty(key)) {
return { key, value: file2[key], status: 'new' };
} else if (file1.hasOwnProperty(key) && file2.hasOwnProperty(key) && file1[key] === file2[key]) {
return { key, value: file1[key], status: 'same' };
} else if (file1.hasOwnProperty(key) && file2.hasOwnProperty(key) && file1[key] !== file2[key]) {
return { key, value: { oldValue: file1[key], newValue: file2[key] }, status: 'changed' };
}
});

return diff.map((item, index, arr) => {
if (item.status === 'removed') {
console.log(`- ${item.key}: ${item.value}`);
} else if (item.status === 'new') {
console.log(`+ ${item.key}: ${item.value}`);
} else if (item.status === 'same') {
console.log(` ${item.key}: ${item.value}`);
} else if (item.status === 'changed') {
console.log(`- ${item.key}: ${item.value.oldValue}`);
console.log(`+ ${item.key}: ${item.value.newValue}`);
}
});
};

genDiff(file1, file2);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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