[0, 1, 2, 3]
之类的数组,它将始终返回0
,因为0
不是数组arr参数的一部分。看起来像我说的基本用法,但我找不到[uhuh ...]为什么。
不工作:
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;
}
答案 0 :(得分:2)
好吧,可能因为Array.prototype.find返回与您的函数匹配的第一个数字。如果该号码为0
,则会返回0
,这将被视为falsy。
您可以通过检查find
方法是否不返回undefined
来更改行为,如此(打字稿更改)
public getFreeNumber(...arr: number[]): number {
let freeNumber: number = 0;
let isTaken: boolean = true;
while (isTaken) {
if (typeof arr.find(n => n === freeNumber) !== 'undefined') {
++freeNumber;
} else {
isTaken = false;
}
}
return freeNumber;
}
并且示例javascript输出将是这样的
function getFreeNumber(arr) {
let freeNumber = 0;
let isTaken = true;
while (isTaken) {
if (typeof arr.find(n => n === freeNumber) !== 'undefined') {
++freeNumber;
} else {
isTaken = false;
}
}
return freeNumber;
}
console.log( getFreeNumber([0,1,2,3]) );