我有a working function (JSFiddle)。在整个脚本中的许多场合,该函数按顺序运行。在这些情况下,我想要整合很多重复的代码。
理想情况下更改代码如下:
functionName("First_item") +
functionName("Second_item") +
functionName("Third_item") +
对于这样的事情:
functionName("First_item", "Second_item", "Third_item");
该函数将针对列表中的每个项目运行,因此结果相同但代码更加优雅和可维护。
注意:
Amit Joki’s answer请注意我可以使用arguments。当我实现代码时,the modified function (JSFiddle)仅返回第一个参数/ item的output
字符串。
Vanice’s answer指出了最终的解决方案。
output
字符串(使用+=
),从所有参数/项的输出中创建一个字符串。return
置于for循环之外来返回连接的输出。非常感谢大家的时间和帮助。我真的很感激!
答案 0 :(得分:5)
利用Javascript的Prototype OOP:您可以将每个函数添加到Array本身,因此代码中的每个数组都会自动拥有每个函数。
Array.prototype.each = function(callback){
for (var i = 0; i < this.length; i++){
callback(this[i]);
}
}
<强>用法:强>
myArray.each(myCoolFunction)
['something','somethingelse',somethingother'].each(myCoolFunction)
myArray.each( function (item) {
// if your item has a method
item.Something();
// if you'd like to call a function on the item:
doSomething(item);
});
<强>注意事项:强>
因为javascript是一种异步语言,在各种浏览器中的解释方式不同,并且固有地处理原始对象和复杂对象的方式不同,所以强烈建议使用下划线或lodash。您也可以自己创建,但是您需要确保正确处理通过的对象。这可能包括变通办法或为通过each
函数传递的不同对象类型创建特殊回调函数。
有关详细信息:Is JavaScript a pass-by-reference or pass-by-value language?
您应该认真考虑的图书馆:
<强> lodash 强>: https://lodash.com/docs#forEach
_([1, 2, 3]).forEach(function(num) { console.log(num); }).join(',');
// → logs each number and returns '1,2,3'
_.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); });
// → logs each number and returns the object (property order is not guaranteed across environments)
<强>下划线强>: http://underscorejs.org/#each
_.each([1, 2, 3], alert);
=> alerts each number in turn...
答案 1 :(得分:3)
你不需要阵列。只需使用arguments
function functionName(){
for(var i = 0; i < arguments.length; i++){
// do something with arguments[i];
}
}
然后你可以做
functionName("shot_type","shot_height","shot_angle","framed","scene_depth");
如果支持旧版IE版本不是问题,那么P.S @ codebox的解决方案是有效的。不知道为什么他删除了它...所以把它放在这里这样有帮助。使用forEach
他的答案
["shot_type","shot_height","shot_angle","framed","scene_depth"].forEach(FunctionName);
答案 2 :(得分:2)
编辑:看看你的小提琴,你在for循环中有一个返回 - 因此该函数将在第一次迭代后返回。在for之后放置return并将输出连接到一个字符串。
var output = "";
for(...){
output += description_of_object + ": " + randomly_selected_item_from_object + ".\n";
}
// return it
return output;
仅限Javascript:
var actions = ["shot_type","shot_height","shot_angle","framed","scene_depth"];
for (var i = 0; i < actions.length; i++){
FunctionName(actions[i]);
}
使用JQuery:
$.each(["shot_type","shot_height","shot_angle","framed","scene_depth"], function(index,value){
FunctionName(value);
});
我还没有对它进行过测试,但它应该可行。
答案 3 :(得分:2)
为了避免代码中的冗余,请使用带有值的数组,您希望通过该函数并在循环中调用该函数。
var vals=["shot_type","shot_height","shot_angle","framed","scene_depth"];
for(var i=0; i<vals.length; i++)
{
FunctionName(vals[i]);
}
如果要扩展函数(添加另一个参数),可以只展开for循环和数组结构。
或者,您可以使用值填充对象并在对象中处理此逻辑。但这只会对调用函数产生影响。