Да, вы правы - это структурный выбор. Вероятно, это не делает ваши программы более правильными, просто используя лямбда-выражения. И это не делает их более надежными, и это не имеет ничего общего со скоростью.
Речь идет только о гибкости и силе выражения. Как понимание списка. Вы можете сделать большую часть этого определения именованных функций (возможно, загрязнение пространства имен, но это опять-таки чисто стилистическая проблема).
Это может помочь читаемости тем фактом, что вам не нужно определять отдельную именованную функцию, что кто-то еще должен будет найти, прочитать и понять, что все, что он делает, - это вызвать метод blah () для его аргумента.
Это может быть намного интереснее, когда вы используете его для записи функций, которые создают и возвращать другие функции, где то, что именно выполняют эти функции, зависит от их аргументов. Это может быть очень сжатым и читаемым способом параметризации вашего поведения кода. Вы можете просто выразить более интересные идеи.
Но это все еще структурный выбор. Вы можете сделать это иначе. Но то же самое касается объектно-ориентированного программирования;)
HTML:
<tr class="text"
*ngFor="let resource of myProjectsList |searchByKeyPipe: projectNameFilter:
'projectName'| searchByKeyPipe: projectIdFilter : 'projectRefNo' |
searchByKeyPipe: dueDateFilter : 'dueOn'| searchByKeyPipe: ownerFilter :
'projectOwnerName' trackBy :trackByNameFunc">
JS
import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
name: "searchByKeyPipe",
pure: false // marking this pipe as stateful pipe
})
export class SearchByKeyPipe implements PipeTransform {
transform(items: any, filter: any, key: any) {
return items.filter(item => {
if (filter == "" || filter == "-1") {
return true;
} else {
var self = this;
return function() {
return item[key]
.toString()
.toLowerCase()
.indexOf(filter.toLowerCase()) > -1
? true
: false;
})();
}
});
}
этим способом, которым у Вас могут быть несколько поле ввода для ключей и они будут искать на конкретном ключе.