gpt4 book ai didi

javascript - 为什么 array.find() 没有按预期工作?

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:27 25 4
gpt4 key购买 nike

早上好!我在具有基本查找用法的 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,这将被视为 falsy .

您可以通过检查 find 方法是否不返回 undefined 来更改行为,就像这样(typescript 更改)

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]) );

关于javascript - 为什么 array.find() 没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42156187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com