为什么array.find()不能按预期工作?

长黑

早上好!我在使用基本查找用法的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章