Filtrer un store à un autre store

nostalgieing Messages postés 50 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 10 avril 2014 - 15 oct. 2012 à 19:17
pmcoste Messages postés 72 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 juillet 2013 - 16 oct. 2012 à 19:07
Bonjour,
je suis débutante en developpement extjs, mon problème est: j'ai un store contenant des données dont on peut trouver des duplications comme cet exemple:
var store = Ext.create('Ext.data.JsonStore', {
fields: ['id','name' ],
data: [
{'id':1,'name':'name1'},
{'id':2,'name':'name2' },
{'id':3,'name':'name2'},
{'id':4,'name':'name1'},
{'id':5,'name':'name3'}
]
});
je veux appliquer un filtre a ce store afin d'extraire dans un autre store(array...) la valeur du champ 'name' et le nombre d'occurrences de chaque valeur de ce champs
comme ce exemple var array=[
{'name1, 2},
{'name2, 2},
{'name3, 1}
]
J'ai pas pu faire ça et j'ai besoin de votre aide c'est urgent

1 réponse

pmcoste Messages postés 72 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 juillet 2013 1
16 oct. 2012 à 19:07
Bonjour,

Le principe est simple : il suffit de créer un tableau dans lequel tu mets tes objets s'ils ne sont pas créés et sinon, tu le mets.

Exemple :

//Voici ton tableau de store
var store = {
    fields: ['id','name' ],
    data: [
        {id:1,name:'name1'},
        {id:2,name:'name2'},
        {id:3,name:'name2'},
        {id:4,name:'name1'},
        {id:5,name:'name3'}
    ]
};

//Déclaration de ton tableau groupé
var dataGroup=[];

//Pour chaque store, je regarde s'il existe. S'il existe, j'ajoute 1, sinon je le créé
for(var i=0;i<store.data.length;i++)
{
    var j=0;
    var bFound=false;
    //Je parcours mon tableau groupé tant que je ne suis pas à la fin et tant que je n'ai pas trouvé mon store
    while(j<dataGroup.length && !bFound)
    {
        if(dataGroup[j].name==store.data[i].name) {
            //Cool, j'ai trouvé mon store, j'ajoute 1 !
            dataGroup[j].nb++;
            //Et je lui dis que j'ai trouvé
            bFound=true;
        }
        else {
            //Pas encore trouvé, je poursuis la recherche de mon tableau
            j++;
        }
    }
    //Mon store n'a pas encore été ajouté, je le mets
    if(!bFound) {
        dataGroup.push({name:store.data[i].name, nb:1});
    }
}

//et pour vérifier, je parcours tout mon tableau et j'affiche le nombre
for(var i=0;i<dataGroup.length;i++)
{
    alert(dataGroup[i].name+" : "+dataGroup[i].nb);
}



-------------------
Oderint dum metuant
0
Rejoignez-nous