javascript Javascript使用参数多次调用函数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17624307/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Javascript call a function several times with the arguments
提问by eshellborn
This isn't totally necessary, I'm just trying to simplify my code. This is what I have:
这不是完全必要的,我只是想简化我的代码。这就是我所拥有的:
function fillWebsitePlaceFiller(number) {
document.getElementById("placefillerWebsite" + number).innerHTML = placefillerWebsite;
}
fillWebsitePlaceFiller(1);
fillWebsitePlaceFiller(2);
fillWebsitePlaceFiller(3);
fillWebsitePlaceFiller(4);
fillWebsitePlaceFiller(5);
fillWebsitePlaceFiller(6);
fillWebsitePlaceFiller(7);
Is there a way I can call the function just once, and it will run through it 7 times with each argument?
有没有一种方法可以只调用一次函数,并且每个参数都会运行 7 次?
回答by OrangeDog
Method 1 - iteration
方法一——迭代
for (var i = 1; i < 8; i++) fillWebsitePlaceFilter(i);
Method 2 - recursion
方法 2 - 递归
(function repeat(number) {
fillWebsitePlaceFiller(number);
if (number > 1) repeat(number - 1);
})(7);
Method 3 - functor application
方法三——函子应用
[1, 2, 3, 4, 5, 6, 7].forEach(fillWebsitePlaceFiller);
Method 4 - internal iteration
方法四——内部迭代
function fillWebsitePlaceFiller(times) {
for (var number = 1; number <= times; number++) {
document.getElementById("placefillerWebsite" + number).innerHTML = placefillerWebsite;
}
}
Method 5 - extend function behaviour
方法 5 - 扩展函数行为
Function.prototype.sequence = function(from, to) {
for (var i = from; i <= to; i++) this.call(null, i);
};
fillWebsitePlaceFiller.sequence(1, 7);
Method 6 - XPath (warning: not tested)
方法 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;
Method 7 - JQuery
方法 7 - JQuery
$('[id^="placefillerWebsite"]').html(placefillerWebsite)
I recommend one of the methods where you don't assume there are always seven of them.
我推荐其中一种方法,您不会假设它们总是有七个。
回答by Ruslan Zavacky
With ES6 it can be solved a bit more elegantly:
使用 ES6 可以更优雅地解决它:
[...Array(7)].forEach((_, i) => fillWebsitePlaceFiller(i + 1))
回答by Scott Mermelstein
A simple for loop!
一个简单的for循环!
for (var i = 1; i <= 7; ++i) {
fillWebsitePlaceFiller(i);
}
Or, just as easily, modify fillWebsitePlaceFiller to do its own for loop:
或者,同样容易地,修改 fillWebsitePlaceFiller 以执行自己的 for 循环:
function fillWebsitePlaceFiller() {
for (var i = 1; i <= 7; ++i) {
document.getElementById("placefillerWebsite" + i).innerHTML = placefillerWebsite;
}
}
回答by Nick
Something like
就像是
function fillWebsitePlaceFiller(number) {
for(i =0; i < number; i++)
document.getElementById("placefillerWebsite" + i).innerHTML = placefillerWebsite;
}
回答by Jim Rubenstein
use a loop
使用循环
function doTimes(number) {
for (var i = 0; i < number; i++) {
fillWebsitePlaceFiller(i);
}
}
doTimes(7);
回答by Rohit Parte
Best and easiest method to iterate one function multiple times is to use qalllib
多次迭代一个函数的最佳和最简单的方法是使用 qalllib
Pros - 1. Iterate sync/async as per requirement 2. No promise violation 3. Returns all results in single array like Promise.all
优点 - 1. 根据要求迭代同步/异步 2. 没有违反承诺 3. 像 Promise.all 一样返回单个数组中的所有结果
Example: https://www.npmjs.com/package/qalllib
示例:https: //www.npmjs.com/package/qalllib
npm i qalllib
const qall = require('qalllib')
function doSomething(params)
{
return new Promise((resolve,reject){
//operations
})
}
qall.qAsyncAll(doSomething, [arg1,
arg2,arg3],3)
.then((response)=>{
console.log(response)
}) //catchBlock
Explanation:-
解释:-
qall.qAsyncAll(functionName without brackets,
arrayOfArguments, arrayOfArguments.length)
Other Example
其他示例
Example
例子
let _ = require('underscore')
let response = ['some data','other data']
return Promise.all(_.map(response, function (data) { return
functionName(data) }))
.then((response)=>{
console.log(response)
})
Result
结果
['response1','response2']