2
早上好!我在freeNumberGenerator函數中遇到了一個基本查找用法的問題。問題是代碼的第一個例子不能返回給我一個空閒數字,如果它需要一個像[0, 1, 2, 3]
這樣的數組,它將總是返回0
,因爲0
不是數組arr參數的一部分。看起來像我說的基本用法,但我找不到[uhuh ...]爲什麼。爲什麼array.find()不能按預期工作?
不工作:
public getFreeNumber(...arr: number[]): number {
let freeNumber: number = 0;
let isTaken: boolean = true;
while (isTaken) {
if (arr.find(n => n === freeNumber)) {
++freeNumber;
} else {
isTaken = false;
}
}
return freeNumber;
}
工作:
public getFreeNumber(...arr: number[]): number {
let freeNumber: number = 0;
let isTaken: boolean = true;
while (isTaken) {
if (arr.indexOf(freeNumber) !== -1) {
++freeNumber;
} else {
isTaken = false;
}
}
return freeNumber;
}
工作:
public getFreeId(arr: Array<IIdentifiable>): number {
let freeId: number = 0;
let isTaken: boolean = true;
while (isTaken) {
if (arr.find(a => a.id === freeId)) {
++freeId;
} else {
isTaken = false;
}
}
return freeId;
}
哦,我現在看到了,所以考慮到你的迴應,與上次的區別例如,它返回一個對象'IIdentifiable'而不是id值,'0'本身。我應該再次閱讀文檔...什麼是最有效的方式來使用/使用? 'indexOf'(第二個例子)? – everblack
我認爲'find'在那裏是一個完全有效的命令,我並不認爲性能有如此大的差異(我也不知道你應該支持哪種數據)。 'find'和'indexOf'都會連續迭代所有的值。如果它需要高性能,並且你期待很多值,我寧願建議你將它映射到一個對象中,然後通過檢查映射對象上是否存在該屬性來搜索空閒數字(這會更快大型數組,因爲它不會繼續搜索整個數組) – Icepickle