Сравнение структур вложенности
учусь прогать на кодварсе, задача: Завершите функцию/метод (в зависимости от языка), чтобы вернуть true/True, когда ее аргументом является массив, имеющий те же структуры вложенности и соответствующую длину вложенных массивов, что и первый массив. Например,
// should return true
[ 1, 1, 1 ].sameStructureAs( [ 2, 2, 2 ] );
[ 1, [ 1, 1 ] ].sameStructureAs( [ 2, [ 2, 2 ] ] );
// should return false
[ 1, [ 1, 1 ] ].sameStructureAs( [ [ 2, 2 ], 2 ] );
[ 1, [ 1, 1 ] ].sameStructureAs( [ [ 2 ], 2 ] );
// should return true
[ [ [ ], [ ] ] ].sameStructureAs( [ [ [ ], [ ] ] ] );
// should return false
[ [ [ ], [ ] ] ].sameStructureAs( [ [ 1, 1 ] ] );
Мой код:
Array.prototype.sameStructureAs = function (other) {
if (this.length !== other.length) return false;
for (let i = 0; i < this.length; i++) {
if (this[i].length !== other[i].length) return false;
if (typeof this[i] !== typeof other[i]) return false;
if (Array.isArray(this[i]) && Array.isArray(other[i])) this[i].sameStructureAs(other[i])
}
return true;
};
почему для:
let b = [[[],[]]].sameStructureAs([[1,1]])
console.log("b",b);
возвращается true, хотя если вывести в консоль типы данных для this и other, то на последней итерации типы данных this и other будут отличаться и должно выполнится условие typeof this[i] !== typeof other[i] и возвратиться false Объясните пожалуйста