命名方法的正确方法[关闭]

问题描述 投票:-1回答:2

最近我读了很多关于代码中的最佳实践,我尝试做的是“避免”重复。你能说出我的新功能吗?

  filterManufacturers(event) {
    this.filteredManufacturers = [];
    for (let i = 0; i < this.manufacturers.length; i++) {
      let manufacturer = this.manufacturers[i].name;
      if (this.dontKnowHowToNameIt(manufacturer, event)) {
        this.filteredManufacturers.push(manufacturer);
      }
    }
  }

  filterModels(event) {
    this.filteredModels = [];
    for (let manufacturerer of this.manufacturers) {
      if (manufacturerer.name === this.vehicle.manufacturer) {
        for (let model of manufacturerer.models) {
          if (this.dontKnowHowToNameIt(model, event)) {
            this.filteredModels.push(model);
          }
        }
      }
    }
  }

  dontKnowHowToNameIt(input, event) {
    return (input.toLowerCase().indexOf(event.query.toLowerCase()) == 0);
  }
angular typescript
2个回答
2
投票

主要基于意见的问题,但让我们回答它。

举个例子来说isInFilter更有意义,因为你通过在函数中使用event.query来限制你。

另一个建议是查看更具体的javascript字符串和数组方法。你正在使用angular和typescript,所以你可以使用你喜欢的任何东西(大多数时候):

filterManufacturers(event) {
  return this.manufacturers.filter(({ name }) => this.isInFilter(name, event.query));
}

filterModels(event) {
  return this.manufacturers
    .filter(({ name }) =>  this.isInFilter(name, this.vehicle.manufacturer))
    .map(({ models }) => models)
    .filter((model) => this.isInFilter(model, event.query))
    .reduce((acc, curr) => acc.concat(curr), []);
}

isInFilter(input, query) {
  return input.toLowerCase().startsWith(query.toLowerCase());
}

这将简化您的代码,因为更少的嵌套({{}{}})发生


0
投票

您可以添加一个功能,并在每次需要时调用它,减少重复次数。

 function toLoop(x, y) {
         for (i of y) {
           if (i.id === x.id) {
             return y.indexOf(i);
           }
}  return -1;}

你在另一个函数上调用它..

 if (toLoop(r, resp[key]) === -1) {
      resp[key].push(r);
    }
© www.soinside.com 2019 - 2024. All rights reserved.