Javascript:获取数组的每n个元素

Javascript:获取数组的每n个元素,javascript,arrays,Javascript,Arrays,我得到了一个数据数量未知的数组。 但我只有预定义的数据量要显示/存储。 如何获取初始数组的第n个元素并在JavaScript中减少它 例如:我得到一个大小为10000的数组,但只能显示n=2k个元素 我是这样试的: delta=Math.round(10*n/size)/10=0.2->取初始数组的每5个元素 for (i = 0; i < oldArr.length; i++) { arr[i] = oldArr[i].filter(function (value, index, a

我得到了一个数据数量未知的数组。 但我只有预定义的数据量要显示/存储。 如何获取初始数组的第n个元素并在JavaScript中减少它

例如:我得到一个大小为10000的数组,但只能显示n=2k个元素

我是这样试的: delta=Math.round(10*n/size)/10=0.2->取初始数组的每5个元素

for (i = 0; i < oldArr.length; i++) {
  arr[i] = oldArr[i].filter(function (value, index, ar) {
    if (index % delta != 0) return false;
    return true;
  });
}
for(i=0;i
对于0.2,它总是0,但是对于其他一些增量(0.3),它是有效的。对于delta=0.4也一样,i可以工作,但是每一秒的元素都是这样。我该怎么做才能让它正常工作?

试试看

arr = oldArr.filter(function (value, index, ar) {
    return (index % ratio == 0);
} );
其中,如果希望
arr
oldArr
的1/2,则
比率为2;如果希望它为
oldArr
的1/3,则比率为3,依此类推

ratio = Math.ceil(oldArr.length / size); // size in the new `arr` size

您在循环中对
oldAdd
的每个元素调用
filter()
,您应该对整个数组调用
filter()
,以获取新的筛选数组。

filter本身返回一个数组。如果我理解正确的话,你就不需要周围的循环。因此:

newArr = oldArr.filter(function(value, index, Arr) {
    return index % 3 == 0;
});

将在oldArr中将newArr设置为每三个值。

可能有一种解决方案:

避免使用过滤器,因为您不想循环超过10000个元素! 只需使用for循环直接访问它们


var log=function(val){document.body.innerHTML+=''+val+''}
var oldArr=[0,1,2,3,4,5,6,7,8,9,10]
var-arr=[];
var-maxVal=5;
var delta=数学楼层(oldArr.length/maxVal);
//避免使用过滤器,因为您不希望
//循环超过10000个元素!
//只需使用for循环直接访问它们!
//                                 |
//五
对于(i=0;i