const deepEqual = (a, b) => {
// Проверка на объекты ли?
if(typeof a !== 'object' || typeof b !== 'object') return false
// Проверка на являются ли нулями?
if(a === null || b === null) return false
// Создаём два массива
let A = Object.keys(a)
let B = Object.keys(b)
// Проверка на длину объекта
if(A.length !== B.length) return false
// Итериуем первый объект и находим подобный элемент в другом объекте (Если это объект, то рекурсия)
for(let i = 0; A.length > i; i++){
if(a[A[i]] !== b[A[i]]) {
if(typeof a[A[i]] === 'object'){
if(deepEqual(a[A[i]], b[A[i]])) continue
else return false
}
return false
}
}
// Возвращаем true, т. к. все условия пройдены!
return true
}
const deepEqual = (a, b) => {
// Проверка на объекты ли?
if(typeof a !== 'object' || typeof b !== 'object') return false
// Проверка на являются ли нулями?
if(a === null || b === null) return false
// Создаём два массива
let A = Object.keys(a)
let B = Object.keys(b)
// Проверка на длину объекта
if(A.length !== B.length) return false
// Итериуем первый объект и находим подобный элемент в другом объекте (Если это объект, то рекурсия)
for(let i = 0; A.length > i; i++){
if(a[A[i]] !== b[A[i]]) {
if(typeof a[A[i]] === 'object'){
if(deepEqual(a[A[i]], b[A[i]])) continue
else return false
}
return false
}
}
// Возвращаем true, т. к. все условия пройдены!
return true
}
function arrayToList(array, index = 0){
return {
value: array[index],
rest: index === array.length - 1 ? null : arrayToList(array, ++index)
}
}
function reverseArrayInPlace(array){
let length = array.length
for(let i = 0; i < length /2; i++){
[array[i], array[length - 1 - i]] = [array[length - 1 - i], array[i]]
}
}
const array = [0, 1, 2, 3]
reverseArrayInPlace(array)
console.log(array)
Текущая имплементация имеет пространственную и временную сложность (time/space complexity)