Привет!
Чтобы просто код запускался, то вот, там фигурных скобок парочки не хватало:
function objEqual(a, b) {
var keysA = Object.keys(a);
var keysB = Object.keys(b);
for (var i = 0; i < keysA.length; i++) {
var key = keysA[i];
if (key in keysB) {
return true;
}
}
return keysA.length !== keysB.length;
}
Форматируй код - поможет находить такие ошибки.
А по поводу написания функции для сравнения объектов попробую повдохновляться готовыми решениями (если стоит задача написать свою такую функцию). Вот например обсуждение: How can I determine equality for two JavaScript objects?. Ну, или прикинуть свой алгоритм. В очень упрощенном виде, на основе твоего код:
function objEqual(a, b) {
var keysA = Object.keys(a);
var keysB = Object.keys(b);
if (keysA.length !== keysB.length) {
return false
}
for (var i = 0; i < keysA.length; i++) {
var key = keysA[i];
if (!keysB.includes(key) || a[key] !== b[key]) {
return false;
}
}
return true
}
Там надо его дополнять, проверять какой тип поля объекта, например если это массив, то сравнивать поочередно все элементы массива, если тип поля объект - то рекурсивно вызывать саму функцию сравнения objEqual()
. Нужно сделать сложных тестов и на основе этих тестов проверять и дорабатывать эту функцию сравнения objEqual()
. Типа:
const a = {
a: 1,
b: [1, 2, 3]
c: {
d: 4,
e: 'f'
}
};
const b = {
a: 1,
b: [1, 2, 3]
c: {
d: 4,
e: 'k'
}
}
objEqual(a, b);
И дальше придумывать свои различные простые и сложные объекты a
и b
и допиливать и рихтовать на их основе функцию сравнения, как-то так.