2016-01-01 2 views
0

Эти три функции используют один и тот же цикл отдельно.Есть ли лучший способ сделать это? Повторное использование одного и того же цикла в нескольких функциях?

Должен ли я удалить петли из каждой функции и поместить их в один большой цикл? Есть ли другой лучший способ?

function createArrayOfNames(catsArray) { 
     var catNames = []; 
     for (var i = 0; i<catsArrayLength; i++) { 
      catNames.push(cats[i].name); 
     } 
     return catNames; 
    } 

    // 
    function createArrayOfListElements(listElement, catNames) { 
     for(i = 0; i<catsArrayLength; i++) { 
      var listElements = []; 
      var listElement = listElement; 
      listElement.innerHTML = catNames[i] 
      listElements.append(listElement); 
     } 
     return listElements; 
    } 

    //Adds cat names to the catList unordered list (inside the catListContainer div) 
    function addCatListToView(listElements, catNames) { 
     for(i = 0; i<catsArrayLength; i++) { 
      getElementById('allCats').append(listElements[i]); 
     } 
    } 
+0

Ваши методы делают разные вещи. Как их объединить? Кроме того, 'createArrayOfListElements' возвращает только список с 1 элементом. И что с 'var listElement = listElement;'? –

+0

Функции _3 используют один и тот же цикл отдельно. Я не вижу никакого сходства, кроме использования конструкции 'for'. – hindmost

+0

Похоже, что происходит какой-то фанковый дизайн. Почему «catsArrayLength» ссылается как общая переменная? Какова связь между этим, 'cats' и' listElements'? Вы дали неполный пример, поэтому любое предложение должно сделать слишком много предположений. –

ответ

2

Да, создание функции итерации было бы хорошим способом сделать ваш код более удобочитаемым.

function iterateCats(callback) { 
    for(i = 0; i<catsArrayLength; i++) { 
     callback(i); 
    } 
} 

Но, как @squint упоминалось выше, если вы не возражаете, что делает ваш catsArray доступны для всех функций, используя forEach это стандарт и быстрый способ для достижения этой цели.

+5

JavaScript уже имеет это. Он называется '.forEach()'. –

+1

Спасибо, но нет. 'forEach' не то же самое, сначала он пропускает неопределенные значения. – lleaff

+4

Это хорошо, учитывая 'кошки [i] .name'. И он не пропускает значения 'undefined'. Он пропускает отверстия в массиве. Если у него есть разреженный массив, в любом случае, возможно, что-то не так. –

0

Вы можете использовать Map и forEach, чтобы немного почистить код. Кроме того, будьте осторожны, вы сбросили var listElements = []; на каждой итерации.

function createArrayOfNames(catsArray) { 
    return catsArray.map(function (c) { 
     return c.name 
    }); 
} 

function createArrayOfListElements(catNames) { 

    var listElements = []; 

    catNames.forEach(function(name) { 
     var listElement = new listElement(); 
     listElement.innerHTML = name; 
     listElements.append(listElement); 
    }); 

    return listElements; 
} 

function addCatListToView(listElements) { 

    var catElements = getElementById('allCats'); 

    listElements.forEach(function(element) { 
     catElements.append(element); 
    }; 
} 
Смежные вопросы