Сравнение структур вложенности

учусь прогать на кодварсе, задача: Завершите функцию/метод (в зависимости от языка), чтобы вернуть 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 Объясните пожалуйста


Ответы (0 шт):