Задача: Одинаковы ли объекты?
Реализуй функцию isIdentical в helper.js
Она должна принять два объекта и вернуть логическое значение, которое скажет совпадают ли значения всех полей в объектах.
Полями объектов будут только примитивные значения (строки, числа или true/false)
Код не проходит по пункту: 3. Функция isIdentical должна возвращать true, если объекты идентичны, и false в противном случае.
export const isIdentical = (obj1, obj2) => {
let keys = 0;
let values = 0;
for (let i in obj1) {
for (let y in obj2) {
if (y === i) {
keys += 1;
}
if (obj2[y] === obj1[i]) {
values += 1;
}
}
}
return keys === values?true:false;
}
Почему так? Я взял 2 объекта, двумя циклами сравниваю ключи и значения 2-ух объектов. Двумя переменными обозначаю ключ и значение, если в итоге они будут равны, то элементы объектов идентичны, если нет, то не равны.
Я так понимаю дело было в сравнении длинны ключей объектов, я честно говоря так до конца и не понял как это работает, просто пробовал разные методы и все. Если кому-то поможет, то вот по этому коду задание проходит по всем 4-ем пунктам:
export const isIdentical = (obj1, obj2) => {
let allLength = true; //переменная которая говорит нам совпадает (или нет) количество ключей в 1 и 2 объекте
let allLength1 = 0; //это переменная для случая если кол. ключей в 2-ух объектах совпадает (переменная показывает кол. ключей)
if (Object.keys(obj1).length !== Object.keys(obj2).length) { //вот тут оч странно, попробуйте поменять !== на === и вы автоматически будете сравнивать не длину ключей 2-ух объектов, а просто 2 объекта (которые НИКОГДА) равны не будут даже при идентичных ключ-значение
allLength = false;
}
else { //это условие для вывода количества ключей у объекта при условии если они равны (а как понять что они равны фиг его знает, потому что выше описанное условие работает при не равном количестве ключей у объектов, этот элсе я поставил для "остальных случаев" (типа равное количество ключей)
allLength1 = Object.keys(obj1).length;
}
let keysAndValues = 0; // переменная для счетчика совпадений между ключами и значениями 2-ух объектов
for (let i in obj1) {
for (let y in obj2) { // цикл в цикле который перебирает отдельно ключи, отдельно значения двух объектов
if (y === i && obj2[y] === obj1[i]) {
keysAndValues += 1; // счетчик совпадений
}
}
}
return allLength && keysAndValues === allLength1?true:false; // если переменная(длин ключей) true и переменная совпадений (счетчика) равна длинам ключей объектов - возвращаем true иначе false.
}