Javascript使用参数多次调用函数

esh*_*orn 11 javascript

这不是完全必要的,我只是想简化我的代码.这就是我所拥有的:

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

            fillWebsitePlaceFiller(1);
            fillWebsitePlaceFiller(2);
            fillWebsitePlaceFiller(3);
            fillWebsitePlaceFiller(4);
            fillWebsitePlaceFiller(5);
            fillWebsitePlaceFiller(6);
            fillWebsitePlaceFiller(7);
Run Code Online (Sandbox Code Playgroud)

有没有办法可以只调用一次这个函数,每个参数会运行7次?

Sto*_*ica 44

方法1 - 迭代

for (var i = 1; i < 8; i++) fillWebsitePlaceFilter(i);
Run Code Online (Sandbox Code Playgroud)

方法2 - 递归

(function repeat(number) {
    fillWebsitePlaceFiller(number);
    if (number > 1) repeat(number - 1);
})(7);
Run Code Online (Sandbox Code Playgroud)

方法3 - 仿函数应用程序

[1, 2, 3, 4, 5, 6, 7].forEach(fillWebsitePlaceFiller);
Run Code Online (Sandbox Code Playgroud)

方法4 - 内部迭代

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

方法5 - 扩展功能行为

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

fillWebsitePlaceFiller.sequence(1, 7);
Run Code Online (Sandbox Code Playgroud)

方法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;
Run Code Online (Sandbox Code Playgroud)

方法7 - JQuery

$('[id^="placefillerWebsite"]').html(placefillerWebsite)
Run Code Online (Sandbox Code Playgroud)

我推荐一种方法,你不假设总有七种方法.


小智 10

使用ES6,它可以更优雅地解决:

[...Array(7)].forEach((_, i) => fillWebsitePlaceFiller(i + 1))
Run Code Online (Sandbox Code Playgroud)


Sco*_*ica 5

一个简单的for循环!

for (var i = 1; i <= 7; ++i) {
    fillWebsitePlaceFiller(i);
}
Run Code Online (Sandbox Code Playgroud)

或者,同样简单地,修改 fillWebsitePlaceFiller 以执行自己的 for 循环:

function fillWebsitePlaceFiller() {
    for (var i = 1; i <= 7; ++i) {
        document.getElementById("placefillerWebsite" + i).innerHTML = placefillerWebsite;
    }
}
Run Code Online (Sandbox Code Playgroud)