Я пытаюсь написать функцию, которая проверяет, имеют ли два объекта одинаковые значения. Эта функция требует проверки равенства любых объектов, которые хранятся как значения внутри исходных объектов. Подход, который я разработал (см. Код ниже), - это сначала проверить равенство значений, отличных от объекта. Затем, если все они совпадают, я снова перебираю объекты и делаю рекурсивный вызов исходной функции, что позволяет мне сравнивать каждый вложенный уровень этих двух объектов.Проверка функции для «глубокого равенства» вложенных объектов
Однако этот подход работает только частично. Характер рекурсивного вызова означает, что я могу проверить равенство вложенных объектов в первой паре ключ-значение в объекте. Я не могу понять, как проверить любые дополнительные пары ключ-значение, содержащие вложенные объекты, когда первый набор вложенных объектов сравнивается, и возвращается рекурсивный вызов. Вот функция:
var deepEqual = function(val1, val2) {
if (typeof val1 === 'object' && typeof val2 === 'object') {
for (i in val1) {
for (i in val2){
if (typeof val1[i] !== 'object' && typeof val2[i] !== 'object') {
if (val1[i] !== val2[i]) {
return false
}
}
}
}
for (i in val1) {
for (i in val2){
if (typeof val1[i] === 'object' && typeof val2[i] === 'object') {
return deepEqual(val1[i], val2[i])
}
}
}
return true
}
else if (val1 === val2) {
return true
}
else return false
}
Моя основная проблема заключается в том, что я считаю, мне нужно рекурсивный вызов, чтобы проверить для глубокого равенства вложенных объектов, но что я могу сделать только один раз эту проверку успешно. Кто-нибудь пытался решить такую проблему? Я приведу примеры своих результатов для конкретных объектов, если вам нужно более конкретно. Благодаря!
Вы говорите, что вам не нужны имена собственности? Btw, 'для (i в val1) для (i в val2)' является катастрофическим. – Bergi
Я проверяю значения. Согласитесь, что петли for не оптимальны - несите меня, я неопытный программист, это был мой первый проход по этой проблеме. – benpiggot
Итак, вы ожидали бы '{a: 1, b: 2}' и '{a: 2 , b: 1} 'равны (поскольку они содержат одни и те же значения)? – Bergi