1

我正在做英雄教程的角度之旅,但有些东西我不明白,我做了一些谷歌搜索,但没有找到解释。我不知道我可以在哪里提问。所以,对不起,如果我在错误的地方......

所以,有:https ://angular.io/tutorial/toh-pt6#simulate-a-data-server

我不明白这部分:

  // Overrides the genId method to ensure that a hero always has an id.
  // If the heroes array is empty,
  // the method below returns the initial number (11).
  // if the heroes array is not empty, the method below returns the highest
  // hero id + 1.

  genId(heroes: Hero[]): number {
    return heroes.length > 0 ? Math.max(...heroes.map(hero => hero.id)) + 1 : 11;
  }

genId() 方法,它有什么作用?有人可以逐步解释我吗?

特别是这部分:

return heroes.length > 0 ? Math.max(...heroes.map(hero => hero.id)) + 1 : 11;

这是我迷路的部分:

Math.max(...heroes.map(hero => hero.id)) + 1 : 11;

谢谢。

4

1 回答 1

1

可能是三元组(“condition ? expression-if-true : expression-if-false”)与不太熟悉的数组扩展表示法(“...”)的混合使得这有点过于紧凑。将其解压缩为等效代码可能有助于使其更清晰:

genId(heroes: Hero[]): number {

    // determine next-available id
    if (heroes.length > 0) {
        // we already have some heroes, so:

        // get array of just the ids:
        let existingIds = heroes.map(hero => hero.id); // [11,12,...,20] (assuming 20 is the highest id used so far)

        // and find the highest number in that array:
        // "..." spread notation turns this statement into Math.max(11,12,13,...,20)
        let max = Math.max(...existingIds); // 20

        return max + 1; // 21

    } else {
        // we have no heroes, so:
        return 11; // start at 11
    }

}
于 2020-08-26T16:52:56.797 回答