创建javascript数组,其中每个元素都有一个可以引用它在新数组中的位置的函数

时间:2018-05-21 19:20:43

标签: javascript

我正在尝试获取一个字符串数组,并使用它们根据这些字符串的过滤子集创建一个对象数组。我需要我的对象包含一个方法,该方法可以访问创建的数组中的对象位置。

我尝试了以下内容:

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的任何调用都只会传递其当前值。我希望callSomethingindex定义时传递callSomething的值。

我不能只使用jQuery中的索引(i),因为我不希望所有元素都以新数组结尾,只是一个过滤集。

1 个答案:

答案 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++;
    }
});