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