GOOGLE ADS

samedi 16 avril 2022

Javascript : prend chaque nième élément de tableau

Je reçois un tableau avec un nombre inconnu de données. Mais je n'ai qu'une quantité prédéfinie de données à afficher/stocker. Comment puis-je prendre chaque nième élément du tableau initial et le réduire en JavaScript ?

Par exemple : J'obtiens un tableau avec size=10000, mais je ne peux afficher que n=2k Elements.

Je l'ai essayé comme ça: delta= Math.round(10*n/size)/10 = 0.2 -> prendre chaque 5ème élément du tableau initial.

for (i = 0; i < oldArr.length; i++) {
arr[i] = oldArr[i].filter(function (value, index, ar) {
if (index % delta!= 0) return false;
return true;
});
}

Avec 0,2, c'est toujours 0, mais avec d'autres deltas (0,3), cela fonctionne. Idem pour delta=0.4, i fonctionne, mais chaque second Element est pris avec ça. Que puis-je faire pour que cela fonctionne ?


Solution du problème

Peut-être une solution:

évitez le filtre car vous ne voulez pas boucler plus de 10 000 éléments! il suffit d'y accéder directement avec une boucle for!


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

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...