2
votes

javascript laisse max 3 occurrences du même obj dans un tableau

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.


0 commentaires

3 Réponses :


2
votes

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


0 commentaires

1
votes

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


0 commentaires