[英]Javascript, check if array contains a function
我以这种方式将一些匿名函数推入数组:
myArray.push(function(){ /* some cool code here */});
myArray.push(function(){ /* some cooler code here */});
然后我执行所有功能
while (myArray.length) { myArray.shift().call();}
问题是:如何检查函数是否已经存在于myArray
? 我试图使用toSource()
进行比较,但是它不起作用...知道吗?
提前致谢。
将功能作为字符串进行比较:
func1.toString() === func2.toString()
这甚至可以与匿名函数一起使用,但是假设等效地,您的意思是具有相同的代码,一个又一个字符。
您可以使用Array.prototype.indexOf
来检查您的数组是否具有该功能:
var foo = function () {};
var bar = function () {};
var arr = [];
var addFunction = function (f) {
if (arr.indexOf(fn) === -1) {
arr.push(fn);
}
};
addFunction(foo);
addFunction(foo);
console.log(arr.indexOf(foo)); // prints 0
console.log(arr.indexOf(bar)); // prints -1
您还可以创建地图以检查是否添加了此功能:
var foo = function foo() {};
var bar = function bar() {};
var arr = [];
var map = {};
var addFunction (fn) {
if (!map[fn.name]) {
arr.push(fn);
map[fn.name] = fn;
}
};
addFunction(foo);
addFunction(foo);
console.log(arr.indexOf(foo), map['foo']); // prints 0, function foo() { ... }
console.log(arr.indexOf(bar), map['bar']); // prints -1, undefined
注意:第二个示例可能不适用于匿名函数。
在向列表中添加函数时,请保留一个单独的对象,在其中记录某种标识符,以使您可以检查函数是否已添加到数组中:
var myArray = [], addedFunctions = {};
for (var i = 0; i < whatever; ++i) {
// do whatever
if (something) {
if (!addedFunctions[ "cool code 1" ]) {
myArray.push(function() { /* cool code 1 */ });
addedFunctions[ "cool code 1" ] = true;
}
}
if (somethingElse) {
if (!addedFunctions[ "cool code 2" ]) {
myArray.push(function() { /* cool code 2 */ });
addedFunctions[ "cool code 2" ] = true;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.