我想輸出一個隨機值陣列和階乘陣列。
abstract class AClass {
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);
}
一切正常。console.log 顯示兩個陣列
fill(array: number[]): number[] {
// Add random numbers to [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;
}
第一個具有 0 到 9 隨機值的陣列
factorial(array: Array<number>): Array<number> {
// Create factorial's array from [Numbers].
var arrayFact = [];
for (var i = 0; i < array.length; i) {
const fact = (x: number) => {
return (x == 0) ? 1 : x * fact(x - 1);
}
arrayFact.push(fact(array[i]));
}
return arrayFact
}
第二個陣列與第一個陣列的階乘值
abstract sort(): void;
}
class Class1 extends AClass {
sort(): void { }
}
var test = new Class1([], []);
console.log(test);
console.log(test.Numbers);
console.log(test.NumbersFact);
結果
建構式中的console.log:
- (10) [0, 8, 4, 6, 3, 7, 1, 9, 2, 5],
- (10) [1, 40320, 24, 720, 6, 5040, 1, 362880, 2, 120]。
代碼末尾的 consol.log :
- Class1 {數字:陣列(10),數字事實:陣列(0)}
- (10) [0, 8, 4, 6, 3, 7, 1, 9, 2, 5]
- []
為什么第二個陣列是空的?
uj5u.com熱心網友回復:
因為
NumbersFact = this.factorial(Numbers);
將函式呼叫的結果分配給NumbersFact方法引數,而不是this.NumbersFact。
原因
Numbers = this.fill(Numbers);
似乎做正確的事情是因為與factorial方法不同,fill修改您作為引數傳入的空陣列。您之前已將該陣列分配給this.Numbers:
this.Numbers = Numbers; // assigned an empty array that gets updated later in the ctor
this.NumbersFact = NumbersFact; // assigned an empty array that stays empty
的回傳值fill也分配給了一個方法引數,而不是分配給this.Numbers.
換句話說,第一個陣列由于錯誤的原因不為空。
吸取教訓:
您的陣列方法應該修改它們的輸入并回傳 void,或者它們應該回傳新陣列并保持其輸入不變。
此規則的唯一例外是,如果您正在創建可鏈接的方法/函式。
理解陣列變數是參考,就像物件變數一樣。他們不持有實際的陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/375605.html
