Javascript:获取数组的第n个元素 [英] Javascript: take every nth Element of Array
问题描述
我得到一个数据数未知的数组. 但是我只有预定义的数据量可以显示/存储. 如何获取初始数组的第n个元素,并在JavaScript中进行精简?
I get an Array with an unknown Number of data. But I only have an predefined amount of data to be shown/store. How can I take every nth Element of the initial Array and reduce it in JavaScript?
例如:我得到一个大小为10000的数组,但只能显示n = 2k个元素.
Eg.: I get an Array with size=10000, but are only able to show n=2k Elements.
我这样尝试过: delta = Math.round(10 * n/size)/10 = 0.2->取初始数组的第5个元素.
I tried it like that: delta= Math.round(10*n/size)/10 = 0.2 -> take every 5th Element of the initial Array.
for (i = 0; i < oldArr.length; i++) {
arr[i] = oldArr[i].filter(function (value, index, ar) {
if (index % delta != 0) return false;
return true;
});
}
使用0.2时,它始终为0,但是使用其他一些增量(0.3)时,它可以工作.同样适用于delta = 0.4,我可以工作,但是每隔一个元素就被占用.我该怎么做才能使它正常工作?
With 0.2 it´s always 0, but with some other deltas (0.3) it is working. Same for delta=0.4, i works, but every second Element is taken with that. What can I do to get this to work?
推荐答案
也许是一种解决方案:
避免使用过滤器,因为您不想循环超过10,000个元素! 只需使用for循环直接访问它们!
avoid filter because you don't want to loop over 10 000 elements ! just access them directly with a for loop !
var log = function(val){document.body.innerHTML+='<div></pre>'+val+'</pre></div>'}
var oldArr = [0,1,2,3,4,5,6,7,8,9,10]
var arr = [];
var maxVal = 5;
var delta = Math.floor( oldArr.length / maxVal );
// avoid filter because you don't want
// to loop over 10000 elements !
// just access them directly with a for loop !
// |
// V
for (i = 0; i < oldArr.length; i=i+delta) {
arr.push(oldArr[i]);
}
log('delta : ' + delta + ' length = ' + oldArr.length) ;
log(arr);
这篇关于Javascript:获取数组的第n个元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!