Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中使用回调时的最后提取内存提取数组值_Javascript_Arrays_Callback_Extract - Fatal编程技术网

在javascript中使用回调时的最后提取内存提取数组值

在javascript中使用回调时的最后提取内存提取数组值,javascript,arrays,callback,extract,Javascript,Arrays,Callback,Extract,假设我有一个动态数组,该数组在页面加载时填充了不同数量的字符串: var arr = ["string1","string2","string3","string4","string5","string6","string7","string8","string9","string10","string11","string12","string13","string14","string15","string16","string17","string18"]; 然后,我有一个函数,在每个事

假设我有一个动态数组,该数组在页面加载时填充了不同数量的字符串:

var arr = ["string1","string2","string3","string4","string5","string6","string7","string8","string9","string10","string11","string12","string13","string14","string15","string16","string17","string18"];
然后,我有一个函数,在每个事件(比方说单击)上调用它,该函数需要连续返回数组的3个字符串,同时记住上次调用它时它停止的值。因此:

第一次调用函数时,它返回:

string1, string2, string3
string4, string5, string6
第二次调用时,它返回:

string1, string2, string3
string4, string5, string6
等等

我不需要click事件或回调函数的代码,而是每次生成提取并将其返回的函数的代码。一些简单的事情,比如能够打电话:

arr.runExtraction();

在每次回调时,让它返回所需的数据。

如果数组耗尽,该怎么办?从头开始

你可以这样做:

function get_iterator(values, steps, start) {
    steps = steps || 1;
    var current = start || 0,
        max = values.length;
    return function() {
        var end = current+steps,
            end = end > max ? max : end,
            t = values.slice(current, end);
        current = end % max;
        // or if you don't want to wrap around:
        // current = end; 
        return t;
    }
}
编辑:添加了
start
参数

由于
current
将与
值相同。length
最后,
splice
如果不换行,将返回一个空数组

使用
slice
不会更改原始数组

然后

var extract = get_iterator(arr, 3);
var arr1 = extract(); // gives you the first three elements
var arr2 = extract(); // gives you the next three elements etc.

如果元素的数量不能被提取的元素的数量整除,那么在“最后一次”提取中可能会得到较少的元素。下一次调用将让它重新开始。您还可以修改它,使其从一开始就环绕并获取元素,以便它始终返回您指定的元素数


参考

哎呀,忘了添加那个部分了。如果提取到达数组的末尾,并且由于只剩下2(或1)个项目而无法提取3个项目,则应提取这2(或1)个项目并完全停止。谢谢你现在的回复。@Jim:更新了我的答案。如果你无论如何都不想换行,也不在乎数组是否更改,那么
splice
似乎是更简单的方法。这正是我想要的!非常感谢。你就是那个人!谢谢,没想到会很难。非常感谢!