Javascript: take every nth Element of Array
Maybe one solution :
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);
Filter itself returns an array. If I'm understanding you correctly, you don't need that surrounding loop. So:
newArr = oldArr.filter(function(value, index, Arr) {
return index % 3 == 0;
});
will set newArr to every third value in oldArr.
Try
arr = oldArr.filter(function (value, index, ar) {
return (index % ratio == 0);
} );
where ratio
is 2 if you want arr
to be 1/2 of oldArr
, 3 if you want it to be 1/3 of oldArr
and so on.
ratio = Math.ceil(oldArr.length / size); // size in the new `arr` size
You were calling filter()
on each element of oldAdd
inside a loop and you're supposed to call filter()
on the whole array to get a new filtered array back.