использовать ES6 для улучшения логики фильтрации

Может быть, если вы покажете весь свой класс контроллера, я могу помочь вам немного больше.

Постарайтесь сделать свой пост следующим образом.

Сделайте один класс каждый get / post

, например, в папке Controllers / Api / MyFunction.cs

в WebApiConfig.cs

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "API/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

в вашем «MyFunction.cs»

public class MyFunction : ApiController
{
    public string Get()
    {
        return "hello";
    }
    public bool Post(string param1)
    {
        return 1;
    }
}
0
задан yariv bar 19 January 2019 в 12:53
поделиться

2 ответа

Не имеет ничего общего с ES6, но вам следует упростить ваше состояние с

(A && ¬Y) || (B && ¬X) || (A && B && X && Y)

до

(A || ¬X) && (B || ¬Y)

. Я бы также рекомендовал использовать some вместо map + includes. Оба эти изменения сделают ваш код более удобным для чтения и более эффективным:

filteredClasses() {
  const {gradeFilter, subjectFilter} = this;
  return _.flatMap(this.classes).filter(x =>
    x.name === this.selectedClass.name
    || (!gradeFilter.length || gradeFilter.some(el => el.value === x.grade))
    && (!subjectFilter.length || subjectFilter.some(el => el.value === x.subjectId))
  );
}
0
ответ дан Bergi 19 January 2019 в 12:53
поделиться

Вы можете повысить эффективность, избегая выполнения одного и того же .map() на каждой итерации .filter(): создайте для него Set и затем проверьте членство с помощью .has():

filteredClasses() {
    const hasGrades = this.gradeFilter.length;
    const hasSubjects = this.subjectFilter.length;
    const gradeSet = new Set(this.gradeFilter.map(el => el.value));
    const subjectSet = new Set(this.subjectFilter.map(el => el.value));

    return _.flatMap(this.classes).filter(x => 
        x.name === this.selectedClass.name ||
        (  (!hasGrades || gradeSet.has(x.grade)) && 
           (!hasSubjects || subjectSet.has(x.subjectId))  )
    );
}
0
ответ дан trincot 19 January 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: