Si je remplis un tableau de paires (dans un get json) comme ceci:
arrItems = [ {t:one,i:square.jpg}, {t:two,i:square.jpg}, {t:three,i:square.jpg}, {t:five,i:triangle.jpg} ];
Comment puis-je le filtrer pour ne laisser que 3 paires où valeur
est la même chose?
Exemple:
arrItems = [ {t:one,i:square.jpg}, {t:two,i:square.jpg}, {t:three,i:square.jpg}, {t:four,i:square.jpg}, {t:five,i:triangle.jpg} ];
Devient
var arrItems = []; for (let y=0; y<50 ;y++){ var titl = data.item[y].name; var img = data.item[y].image[0].url; arrItems.push({t:titl,i:img}); }
JavaScript ou jQuery sont OK.
3 Réponses :
Vous pouvez prendre une table de hachage et compter les occurrences de la propriété souhaitée et filtrer avec une valeur maximale.
.as-console-wrapper { max-height: 100% !important; top: 0; }
var items = [{ t: 'one', i: 'square.jpg' }, { t: 'two', i: 'square.jpg' }, { t: 'three', i: 'square.jpg' }, { t: 'four', i: 'square.jpg' }, { t: 'five', i: 'triangle.jpg' }], count = {}, result = items.filter(({ i }) => { count[i] = (count[i] || 0) + 1; return count[i] <= 3; }); console.log(result);
Il y a peut-être des moyens plus efficaces de l'écrire, mais je pense que le plus simple à comprendre est l'itération simple avec comptage:
var counts = {}; for (var i = 0; i < arrItems.length; i++) { var item = arrItems[i]; var count = counts[item.i] || 0; if (count >= 3) { arrItems.splice(i, 1); i--; } else { counts[item.i] = ++count; } }