是否有方法可以跳过特定数量的对象并从javascript中的数组中获取一定数量的对象?
基本上我正在寻找的模式就是这个。
假设我有一个包含8个对象的数组。
第一次循环:
从数组返回索引0到3的对象。
第二次循环:
从数组返回索引4到7的对象。
第三次循环:
回到开头,再次将对象返回0到3。
Ad无限.....
如果可能的话,我很乐意看到一个基于jquery的解决方案,但我也非常愿意接受原始的javascript实现,因为我很想学习。
干杯。
答案 0 :(得分:12)
像这样(纯JavaScript,不需要jQuery;)):
var iterator = function(a, n) {
var current = 0,
l = a.length;
return function() {
end = current + n;
var part = a.slice(current,end);
current = end < l ? end : 0;
return part;
};
};
然后你可以打电话给它:
var next = iterator(arr, 3);
next(); // gives the first three
next(); // gives the next three.
//etc.
这种形式,最后一次迭代可能会返回更少的元素。您也可以扩展它并使函数接受变量步和不同的启动参数。
如果你想环绕,就好像只剩下两个元素,从一开始就采用元素,那么它会变得更复杂;)
更新:环绕式会是这样的:
var iterator = function(a, n) {
var current = 0,
l = a.length;
return function() {
end = current + n;
var part = a.slice(current,end);
if(end > l) {
end = end % l;
part = part.concat(a.slice(0, end));
}
current = end;
return part;
};
};
答案 1 :(得分:11)
我认为您需要Array.slice或Array.splice。
var ary = [0,1,2,3,4,5,6,7];
alert(ary.splice(0,3).join(','));
答案 2 :(得分:3)
看看这个。 array.slice()
答案 3 :(得分:0)
如果你有一个jQuery引用,jQuery有一个slice method too。
答案 4 :(得分:0)
您也可以使用 JavaScript generators 来实现。下面是一个例子:
function* jumpAndSliceGenerator(arr, n) {
let start = 0;
while(start + n < arr.length) {
const end = start + n;
const part = arr.slice(start, end);
start = end;
yield part;
}
yield arr.slice(start);
}
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (const arrPart of jumpAndSliceGenerator(arr, 3)) {
console.log(arrPart);
}
如果数组不能被跳转大小整除,那么最后一个切片将包含所有小于跳转大小的其余元素