在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
似乎是更简单的方法。这正是我想要的!非常感谢。你就是那个人!谢谢,没想到会很难。非常感谢!