Есть задача по JavaScript
Нужно полностью сравнить два объекта на идентичность их свойств. Порядок свойств в объекте не важен. Если значением какого-то свойства объекта является массив или объект, то начать сверять и их у обоих объектов.
Объект в свойстве другого объекта нужно сверять рекурсивно.
При сверке объектов - последовательность свойств не важна, но при сверке массивов, важна последовательность элементов, то есть массивы: [1,2,3,4]
и [2,1,3,4]
не равны, так как, хотя и имеют одинаковые значения, отличаются в последовательности этих значений.
Полного сравнения объектов я смог добиться, но если в свойстве объекта массив, то каким бы он не был всегда возвращается true. Свойства сравнивал через valueOf для того случая, если свойством будет дата, что бы она сравнивалась корректно.
function deepEqual (obj1, obj2){
if(obj1 === obj2){
return true;
}
else{
if(Object.keys(obj1).length != Object.keys(obj2).length){ // Проверка на одинаковое количество свойств
return false;
}
for(var propName in obj1){
if (! obj2.hasOwnProperty(propName)) { // Есть ли свойства в обоих объектах
return false;
}
if(obj1[propName].valueOf() !== obj2[propName].valueOf()){ // Одинаковы ли значения свойст
if(! deepEqual(obj1[propName], obj2[propName]) ){ // проверка объекта в объекте
return false;
}
}
}
}
return true; }
Вот данные для проверки
Первый объект
var objA = {
prop1: 'value1',
prop2: 'value2',
prop3: 'value3',
prop4: {
subProp1: 'sub value1',
subProp2: {
subSubProp1: 'sub sub value1',
subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5]
}
},
prop5: 1000,
prop6: new Date(2016, 2, 10) };
Второй объект
var objB = {
prop5: 1000,
prop3: 'value3',
prop1: 'value1',
prop2: 'value2',
prop6: new Date('2016/03/10'),
prop4: {
subProp2: {
subSubProp1: 'sub sub value1',
subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5]
},
subProp1: 'sub value1'
} };
В чем ошибка? Нужно ли для проверки массивов создавать новую функцию?
сверить 2 объекта можно одной строчкой:
function deepEqual (obj1, obj2){
return JSON.stringify(obj1)===JSON.stringify(obj2);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем привет! Пытаюсь создать игру(кликер)Кликая на настройки(settings), запускается функция, в которую вложены еще несколько функций
Подскажите регулярку, чтоб вырезать из строки url("/images/imagepng"); ссылку на изображение
Вот код https://jsfiddlenet/f9e0khoo/ Здесь только JS, потому что все равно без БД работать не будет