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.