Javascript 从数组中删除绑定了不同参数的同一函数

Javascript 从数组中删除绑定了不同参数的同一函数,javascript,arrays,Javascript,Arrays,我有一个函数数组,每次使用不同的参数随代码一起添加。它正在工作,它添加了相同的函数和不同的参数作为参数: FunctionList.push(MyFunction.bind(null, Argument, Argument2)); 但是我希望能够从数组中找到并删除一个特定的绑定函数。当我检查我的数组时,它都是[MyFunction(),MyFunction(),MyFunction()]。所以在数组中查找并删除元素的常规方法不适用于此数组 我尝试使用unique删除重复项,但没有成功。当我试图

我有一个函数数组,每次使用不同的参数随代码一起添加。它正在工作,它添加了相同的函数和不同的参数作为参数:

FunctionList.push(MyFunction.bind(null, Argument, Argument2));
但是我希望能够从数组中找到并删除一个特定的绑定函数。当我检查我的数组时,它都是
[MyFunction(),MyFunction(),MyFunction()]
。所以在数组中查找并删除元素的常规方法不适用于此数组

我尝试使用unique删除重复项,但没有成功。当我试图用

FunctionList.indexOf(MyFunction.bind(null, Argument, Argument2));
它给了我
-1


特定函数可以位于数组中的任何位置,因此我不能使用删除最后一个元素之类的方法。

.bind
返回一个新函数对象,两个不同的函数对象将永远不相等

如果要删除某个特定函数,必须保留对该函数的引用,或者必须以不同的方式存储信息。例如,可以为数组创建如下结构,而不是绑定函数:

{
   func: MyFunction,
   args: [Argument1, Argument2],
}
然后,为了找到具有相同函数和参数的条目,您可以使用
findIndex
手动比较每个条目:

FunctionList.findIndex(entry => {
  return entry.func === MyFunction && [Argument1, Argument2].every((arg, i) => arg === entry.args[i]);
});
(当然,您会很好地将其打包成一个可重用的函数)

如果您必须在数组中保持绑定函数,那么您可以考虑将原始函数和参数存储在绑定函数的属性中,并应用上述解决方案。例如

const newFunc = MyFunction.bind(null, Argument, Argument2);
newFunc.original = MyFunction;
newFunc.originalArgs = [Argument, Argument2];
FunctionList.push(newFunc);

你找不到。您需要函数的实际引用才能在数组中找到它,因为您没有在任何地方存储引用,所以无法区分函数。您将无法做到这一点。您可能希望将具有参数和函数的对象按如下方式推入数组-
FunctionList.push({argList:[null,Argument,Argument2],func:MyFunction.bind(null,Argument,Argument2)})
然后使用argList查找索引。