2016-08-16 2 views
0

Я использую класс, в котором каждый метод работает в одном списке, однако я ищу эффективный способ абстрагироваться от функции циклирования каждого тела метода, потому что он присутствует почти в каждом блоке.Тезисы для вызовов цикла из класса

К примеру, в настоящее время я делаю что-то вроде:

class example { 
    constructor(list) { 
    .... 
    } 
    .... 
    someFunc(param) { 
    for (let elem of this.list) { 
     elem.doSomething(); 
    } 
    } 
    someOtherFunc(param) { 
    for (let elem of this.list) { 
     elem.doSomethingElse(); 
    } 
    } 
} 

В идеале я хотел бы иметь возможность вызывать эти методы без использования цикла for of как это приводит к избыточному коду. Мне было интересно, я мог бы добиться этого любым другим способом?

+0

Сделайте метод, который выполняет итерацию по списку и принимает обратный вызов? Или напрямую используйте 'this.list.forEach', если это массив. –

+0

Я надеялся избежать этого и искал способ, которым я мог бы итератировать по-другому. Думаю, я просто создаю новый метод 'forEach'. – badfilms

+0

Ну, вам либо нужно использовать фактический оператор цикла, либо метод API, который применяет функцию к каждому элементу. На самом деле нет ничего другого. Можете ли вы быть более конкретным, что вы искали, возможно, представите пример на другом языке (где вы, возможно, видели все, что искали)? –

ответ

1

Да, вы можете черпать вдохновение из Array.prototype.forEach() и реализовать .each() метод для объекта:

class example() { 
    each(callback) { 
     for (let elem of this.list) { 
      callback(elem); 
     } 
    } 

    someFunc(param) { 
     this.each(x => x.doSomething()); 
    } 
} 

Если list реализован массив, и вы только хотите сделать простой цикл выше, то есть еще лучшие новости, это уже реализовано для вас Array.prototype.forEach():

class example() { 
    someFunc(param) { 
     this.list.forEach(x => x.doSomething()); 
    } 
} 

обычай .each() реализация, конечно, позволяет делать другие вещи в for, чтобы вы могли абстрагироваться от еще большего количества кода.

+0

Первый пример достаточно чист. Благодаря! – badfilms

Смежные вопросы