使用javascript数组跳过take方法

时间:2011-03-28 18:34:14

标签: javascript jquery

是否有方法可以跳过特定数量的对象并从javascript中的数组中获取一定数量的对象?

基本上我正在寻找的模式就是这个。

假设我有一个包含8个对象的数组。

第一次循环:

从数组返回索引0到3的对象。

第二次循环:

从数组返回索引4到7的对象。

第三次循环

回到开头,再次将对象返回0到3。

Ad无限.....

如果可能的话,我很乐意看到一个基于jquery的解决方案,但我也非常愿意接受原始的javascript实现,因为我很想学习。

干杯。

5 个答案:

答案 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.

DEMO

这种形式,最后一次迭代可能会返回更少的元素。您也可以扩展它并使函数接受变量步和不同的启动参数。

如果你想环绕,就好像只剩下两个元素,从一开始就采用元素,那么它会变得更复杂;)

更新:环绕式会是这样的:

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;
    };
};

DEMO

答案 1 :(得分:11)

我认为您需要Array.sliceArray.splice

var ary = [0,1,2,3,4,5,6,7];
alert(ary.splice(0,3).join(','));

答案 2 :(得分:3)

看看这个。 array.slice()

http://www.w3schools.com/jsref/jsref_slice_array.asp

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

<块引用>

如果数组不能被跳转大小整除,那么最后一个切片将包含所有小于跳转大小的其余元素