¿Por qué este array, que yo lleno en el constructor, no se encuentra lleno después de que el constructor finalice?
Quiero imprimir un array de valores aleatorios y un array de factoriales.
abstract class AClass {
<pre><code>Numbers: Array<number>;
NumbersFact: Array<number>;
constructor(Numbers: Array<number>, NumbersFact: Array<number>) {
this.Numbers = Numbers;
this.NumbersFact = NumbersFact;
for (var i = 0; i < 10; ++i) Numbers[i] = i;
Numbers = this.fill(Numbers);
NumbersFact = this.factorial(Numbers);
console.log(Numbers);
console.log(NumbersFact);
}
</code></pre>
<p><code>
Todo funciona correctamente.
console.log muestra dos arrays.
</code>
fill(array: number[]): number[] {</p>
<pre><code> // Añade números aleatorios en [Numbers]
var tmp: number, current: number, top = array.length;
if (top) while (--top) {
current = Math.floor(Math.random() * (top + 1));
tmp = array[current];
array[current] = array[top];
array[top] = tmp;
}
return array;
}
</code></pre>
<p><code>
Primer array con valores aleatorios del 0 al 9.
</code>
factorial(array: Array<number>): Array<number> {
// Crea un array de factoriales a partir de [Numbers].
var arrayFact = [];
for (var i = 0; i < array.length; ++i) {
const fact = (x: number) => {
return (x == 0) ? 1 : x * fact(x - 1);
}</p>
<pre><code> arrayFact.push(fact(array[i]));
}
return arrayFact
}
</code></pre>
<p><code>
Segundo array con valores factoriales del primer array.
</code>
abstract sort(): void;
}</p>
<p>class Class1 extends AClass {
sort(): void { }
}</p>
<p>var test = new Class1([], []);</p>
<p>console.log(test);
console.log(test.Numbers);
console.log(test.NumbersFact);
Resultado
console.log en el constructor:
– (10) [0, 8, 4, 6, 3, 7, 1, 9, 2, 5],
– (10) [1, 40320, 24, 720, 6, 5040, 1, 362880, 2, 120].
consol.log al final del código:
– Class1 {Numbers: Array(10), NumbersFact: Array(0)}
– (10) [0, 8, 4, 6, 3, 7, 1, 9, 2, 5]
– []
¿Por qué el segundo array está vacío?
davy.ai
El segundo array está vacío porque los dos arrays (Numbers y NumbersFact) se pasan como arrays vacíos al constructor de la Clase1, que es una subclase de AClass. Esto significa que los arrays Numbers y NumbersFact pasados al constructor nunca se llenan con ningún valor ya que los métodos fill() y factorial() se llaman dentro del constructor de AClass.
Para solucionar esto, podemos pasar arrays llenos al constructor de Class1 o anular el constructor de Class1 para llamar al constructor de AClass con arrays llenos. Por ejemplo: