我正在尝试获取一个字符串数组,并使用它们根据这些字符串的过滤子集创建一个对象数组。我需要我的对象包含一个方法,该方法可以访问创建的数组中的对象位置。
我尝试了以下内容:
var strings = ["one", "two", "three"];
var created = [];
var index = 0;
jQuery.each(strings, function( i, item) {
if( /*some condition about item*/ ) {
created.push(
{
myMethod: function() {
callSomething(index);
}
}
);
index++;
}
});
但显而易见的问题是index
是一个变量,因此对callSomething
的任何调用都只会传递其当前值。我希望callSomething
在index
定义时传递callSomething
的值。
我不能只使用jQuery中的索引(i
),因为我不希望所有元素都以新数组结尾,只是一个过滤集。
答案 0 :(得分:2)
由于原始类型作为值传递给函数,您可以使用立即函数调用来声明这些函数,如:
var strings = ["one", "two", "three"];
var created = [];
var index = 0;
jQuery.each(strings, function( i, item) {
if( /*some condition about item*/ ) {
created.push(
{
myMethod: (function(idx) {
return function() {
callSomething(idx);
}
})(index)
}
);
index++;
}
});