早上好!我在使用基本查找用法的freeNumberGenerator函数上遇到问题。问题是代码的第一个示例无法向我返回一个自由数,如果它需要一个像[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;
}
好吧,可能是因为Array.prototype.find返回了与您的函数匹配的第一个数字。万一这个数字会0
返回0
,这将被视为虚假的。
您可以通过检查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]) );
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句