Voroba1996
@Voroba1996
JS разработчик

Глубокое сравнение объектов JS?

6247236d9fe3b851397823.png
Текст задачи выше на фото..
Решение:
const deepEqual = (a, b) => {
    if(a === null || b === null ) return 1
    let keysA = Object.keys(a)
    let keysB = Object.keys(b)
    if(typeof a !== typeof b) {
        return false
    }
    if(keysA.length !== keysB.length) return false
    for (let i = 0; i < keysA.length; i++) {
        if(typeof a[keysA[i]] === 'object' && typeof b[keysB[i]] === 'object'){
            if(deepEqual(a[keysA[i]], b[keysB[i]])) continue
            else {return false}
        }
        if(a[keysA[i]] !== b[keysB[i]]) return false
    }
    return true
}

Прошу feedback у тех кто понимает. Вроде как работает хорошо, можно ли это упростить?
  • Вопрос задан
  • 2513 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Хорошо работает, говорите?
deepEqual({a: 1}, {b: 1}); // true
deepEqual(null, {b: 1}); // 1
deepEqual({a: 1, b: 2}, {b: 2, a: 1}); // false

Моё решение

const deepEqual = (a, b) => {
  if (a === b) {
    return true;
  }
  if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {
    return false;
  }
  const aKeys = Object.keys(a);
  const bKeys = Object.keys(b);
  if (aKeys.length !== bKeys.length) {
    return false;
  }
  for (let i = 0; i < aKeys.length; i += 1) {
    const key = aKeys[i];
    if (!bKeys.includes(key) || !deepEqual(a[key], b[key])) {
      return false;
    }
  }
  return true;
};

Ответ написан
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
JSON.stringify({a:1}) === JSON.stringify({a:1})
Или так ))
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы