2013-07-12 2 views
6

Это не совсем необходимо, я просто пытаюсь упростить свой код. Это то, что у меня есть:Javascript вызывает функцию несколько раз с аргументами

function fillWebsitePlaceFiller(number) { 
    document.getElementById("placefillerWebsite" + number).innerHTML = placefillerWebsite; 
    } 

      fillWebsitePlaceFiller(1); 
      fillWebsitePlaceFiller(2); 
      fillWebsitePlaceFiller(3); 
      fillWebsitePlaceFiller(4); 
      fillWebsitePlaceFiller(5); 
      fillWebsitePlaceFiller(6); 
      fillWebsitePlaceFiller(7); 

Есть ли способ, я могу вызвать функцию только один раз, и он будет работать через него 7 раз с каждым аргументом?

+7

он должен быть пятницу, все сумасшедшие решения петли наводняют. –

+0

Ха-ха :) @JimRubenstein – eshellborn

ответ

24

Метод 1 - итерация

for (var i = 1; i < 8; i++) fillWebsitePlaceFilter(i); 

Метод 2 - рекурсии

(function repeat(number) { 
    fillWebsitePlaceFiller(number); 
    if (number < 7) repeat(number + 1); 
})(1); 

Метод 3 - функтор Применение

[1, 2, 3, 4, 5, 6, 7].forEach(fillWebsitePlaceFiller); 

Метод 4 - внутренняя итерация

function fillWebsitePlaceFiller(times) { 
    for (var number = 1; number <= times; number++) { 
     document.getElementById("placefillerWebsite" + number).innerHTML = placefillerWebsite; 
    } 
} 

Метод 5 - расширить функции поведение

Function.prototype.sequence = function(from, to) { 
    for (var i = from; i <= to; i++) this.call(null, i); 
}; 

fillWebsitePlaceFiller.sequence(1, 7); 

Метод 6 - XPath (предупреждение: не тестировалось)

var query = '//*[@id[starts-with(., "placefillerWebsite"]]'; 
var result = document.evaluate(query, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 
while (var node = result.iterateNext()) node.innerHTML = placefillerWebsite; 
+0

+1 только потому, что похоже, что вы наслаждаетесь собой. Рекурсия ?? Sheesh. :-) (И ваш ответ в настоящее время является самым полным из всех опубликованных ответов.) –

+3

Мне лучше остановиться, прежде чем я начну с обхода DQ-кода jquery. – OrangeDog

+0

Вау, я этого не ожидал! Спасибо – eshellborn

4

Простая петля!

for (var i = 1; i <= 7; ++i) { 
    fillWebsitePlaceFiller(i); 
} 

Или, так же легко, изменить fillWebsitePlaceFiller сделать свой собственный цикл:

function fillWebsitePlaceFiller() { 
    for (var i = 1; i <= 7; ++i) { 
     document.getElementById("placefillerWebsite" + i).innerHTML = placefillerWebsite; 
    } 
} 
3

Что-то вроде

function fillWebsitePlaceFiller(number) { 
     for(i =0; i < number; i++) 
     document.getElementById("placefillerWebsite" + i).innerHTML = placefillerWebsite; 
     } 
2

использовать цикл

function doTimes(number) { 
    for (var i = 0; i < number; i++) { 
     fillWebsitePlaceFiller(i); 
    } 
} 

doTimes(7); 
5

С ES6 она может быть решена немного более элегантно:

[...Array(7)].forEach((_, i) => fillWebsitePlaceFiller(i + 1)) 
Смежные вопросы