Effacer un élément quelconque d'un tableau Array, et changé l'indice de tous les

Résolu
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 - 25 oct. 2007 à 14:22
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 26 oct. 2007 à 13:58
Bonjour à tous,

je suis toujours sur un projet qui me fait perdre la boule (à chaque problème résolu, un nouveau apparait !!).

Bref, cette fois-ci, j'aimerais savoir s'il existerait une fonction permettant d'effacer n'importe quel élément d'un tableau Array (quel que soit son indice), et d'avancer les numéros d'indice des éléments suivants en conséquent, donc de diminuer la taille du tableau.

En cherchant vite fait sur le web, j'ai bien trouvé des fonctions permettant d'effacer le premier élément, le dernier, ou de remplacer n'importe quels éléments par d'autres. Mais pas ce que je voulais.

La fonction delete tab[n°indice]
a failli me plaire mais elle rend indéfini l'element d'indice i et ne change pas la taille du tableau.

Sur ce, si quelqu'un pouvait m'aider, je lui en serai très reconnaissant.
Merci d'avance.

Signé Sagat
A voir également:

15 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2007 à 15:14
exemple ? ( pas testé à fond ! loin de là !!! )

<script type="text/javascript">
    function affiche()
    {    var tmp="";
        for ( var n=0;n<tab.length;n++ )
        {    tmp+=" "+tab[n];    }
        alert(tab.length+"\r\n"+tmp);
    }

    var tab=new Array("a","b","c","d","e","f","g","h","i");
    affiche();
    function efface(chp)
    {    if ( Number(chp)>=0 & Number(chp)<tab.length )
        {    for ( var n=Number(chp);n<tab.length-1;n++ )
            {    tab[n]=tab[n+1];    }
            tab.pop();
            affiche();
        }

    }
</script>

Supprimer :
   

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
3
Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
25 oct. 2007 à 15:22
Bonjour, z'a vous
sinon, prototypage sur Array , on va pas s'en priver du genre :
            /**
            * Supprime l'élement à l'indice _idx
            *
            * @param _idx
            *                Indice de l'enregistrement à supprimer.
            */
            Array.prototype.remove = function (_idx){
                for ( var i = _idx; i < this.length -1 ; i++){
                    this[i] = this[i+1];
                }
                this.pop();
                return this;
            }

et un exemple :
            function check(){
                var tt= new Array();
                for ( var i = 0; i < 10; i++){
                    tt.push(i);
                }
                alert ( tt.toString());
                tt= tt.remove(5);
                alert ( tt.toString());
                tt= tt.remove(5);
                alert ( tt.toString());
            }

Et voili voulou ;o)

[o-_-o]
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
25 oct. 2007 à 17:22
Bonjour à tous,
pourquoi ne pas utiliser la méthode splice des array, elle existe et sert à ajouter et ou à retirer des éléments d'un tableau
.








exemple pour supprimer des éléments



 var Tab    = new Array( "Zero", "Un", "Deux", "Trois", "Quatre", "Cinq" );
 var Indice = 1;
 var Nombre = 2;
 var T_Delete = Tab.splice( Indice, Nombre);
 alert( "Tab :" +Tab +"\nT_Delete :" +T_Delete);









;0)
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2007 à 15:01
Bonjour,
    à brule pourpoint, comme ça, je dirais décaler les éléments
        (   celui "à sucrer +1" remplaçant "celui à sucrer"
            et ainsi de suite... )
        et finir par array.pop() qui supprime le dernier élément
    peut-on faire mieux ? probablement...      
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
25 oct. 2007 à 15:24
Merci bultez,


j'ai testé ton script et il fonctionne,on obtient bien ce qui était escompté.


C'est dommage, je pensais qu'il existait une fonction de base permettant de faire cela. Mais à défaut le système D aide toujours.

Encore merci.

Signé Sagat
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2007 à 15:45
>je pensais qu'il existait une fonction de base permettant de faire cela.





    c'est peut-être ( probablement ? sûrement ? ) le cas !
        mais n'étant pas particulièrement pointu en javascript,
        il faut attendre l'intervention d'autres personnes,
        alors en attendant...
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2007 à 16:19
>>prototypage sur Array
    la solution de Zobibol est bien "plus propre" et plus
        générale que mon 1er jet.


<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 oct. 2007 à 18:12
ah... je venais pour causer de splice !
trottoir : PetoleTeam fut le plus véloce, et c'est nickel
reste à mettre dans Array.prototype, et là : le top     ;o)
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
25 oct. 2007 à 23:13
Bonjour, désolé de répondre si tard, donc en fait bonsoir ;)

=> Zobibol, je te remercie, tu m'apprends un nouveau truc, très interessant d'ailleurs. A étudier.

=> Bultez, comme toujours tu m'es d'un grand secours. Merci.

=>PetroleTeam, tu m'as fait ouvrir les yeux. 
   Je m'explique: sur le site selfhtml, j'avais regardé les méthodes pouvant être appliquées au tableau array; j'avais remarqué cette méthode mais leur explication (pas très clairs) m'avaient fait pensé qu'elle remplaçait les elts effacés par des eléments vides. Ce qui ne m'interessait pas, mais n'est en fait pas le cas. Donc merci.

Petit à petit, j'avance, j'avance...
Merci à tous.

Signé Sagat
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
25 oct. 2007 à 23:15
Par contre, comment fait-on un prototypage sur Array ou autre ??

Signé Sagat
0
Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
26 oct. 2007 à 11:54
Comme je l'ai écrit plus tôt :

Array.prototype.MethodeName = function (_param){
}

Si toute fois tu mets en place des prototypes sur Array, te serait-il possible de les partager ( soit dans un source ) soit dans un tutoriel, ça pourrait être relativement interressant.

Le seul soucis que j'ai rencontré c'est avec Internet Explorer qui ne veut pas qu'on prototype sur Document ( c'est bien domage car cela pourrait être fort utile ! ) donc si quelqu'un a un contournement, je suis preneur !

[o-_-o]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
26 oct. 2007 à 12:41
    ici, à mon humble avis, mettre en 'prototype' n'apporterait rien
        ( on peut dire que splice l'est dèjà ! ) , à part renommer splice
        et/ou eviter 1 paramètre ???
    il y avait
   ;o)   en fin de suggestion.

>>sur selfHTML, j'avais regardé les méthodes pouvant être appliquées au tableau array;

>>j'avais remarqué cette méthode mais leur explication (pas très claire)..
 
    sagat06++

>>Internet Explorer qui ne veut pas qu'on prototype sur Document
>>c'est bien dommage car cela pourrait être fort utile !


    zobibol++

    tu peux nous montrer un truc qui ne fonctionne pas ?
    dans une autre question peut-être ?

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
26 oct. 2007 à 13:43
Je vous prépare cela !

[o-_-o]
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
26 oct. 2007 à 13:54
Bonjour à tous,
un exemple de prototype
if( !Array.remove){  // on ne sait jamais cela peut venir
  Array.prototype.remove =
    function( num_, nb_){
      //-- Gestion de quelques erreurs
      if( typeof( num_) ! ='number') //genere une erreur
        throw new Error("Array.remove() : Le premier paramètre doit être un nombre !");
      //-- index trop grand
      if( num_ > this.length)
        return([]);                 //retourne un tableau vide
      //-- par defaut un element a supprimer
      nb_ = nb_ ? nb_ : 1;
      //-- Applique la methode splice
      var T_Kill = this.splice( num_, nb_);
      //-- retourne le tableau killer comme splice
      return ( T_Kill);
    }
}

 
c'est surement perfectible...
 

;0)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
26 oct. 2007 à 13:58
Bonjour,
Oooh! flûte et zûte je n'ai pas régénéré la page avant d'écrire donc pas vu le message de Zobibol


;0)
0
Rejoignez-nous