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

sagat06 166 Messages postés mercredi 27 juin 2007Date d'inscription 31 mars 2014 Dernière intervention - 25 oct. 2007 à 14:22 - Dernière réponse : PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention
- 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
Afficher la suite 

15 réponses

Répondre au sujet
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 25 oct. 2007 à 15:14
+3
Utile
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]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_bultez
Zobibol 469 Messages postés mercredi 9 janvier 2002Date d'inscription 20 février 2017 Dernière intervention - 25 oct. 2007 à 15:22
+3
Utile
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]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Zobibol
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 25 oct. 2007 à 17:22
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de PetoleTeam
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 25 oct. 2007 à 15:01
0
Utile
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]
Commenter la réponse de cs_bultez
sagat06 166 Messages postés mercredi 27 juin 2007Date d'inscription 31 mars 2014 Dernière intervention - 25 oct. 2007 à 15:24
0
Utile
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
Commenter la réponse de sagat06
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 25 oct. 2007 à 15:45
0
Utile
>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]
Commenter la réponse de cs_bultez
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 25 oct. 2007 à 16:19
0
Utile
>>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]
Commenter la réponse de cs_bultez
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 25 oct. 2007 à 18:12
0
Utile
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]
Commenter la réponse de cs_bultez
sagat06 166 Messages postés mercredi 27 juin 2007Date d'inscription 31 mars 2014 Dernière intervention - 25 oct. 2007 à 23:13
0
Utile
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
Commenter la réponse de sagat06
sagat06 166 Messages postés mercredi 27 juin 2007Date d'inscription 31 mars 2014 Dernière intervention - 25 oct. 2007 à 23:15
0
Utile
Par contre, comment fait-on un prototypage sur Array ou autre ??

Signé Sagat
Commenter la réponse de sagat06
Zobibol 469 Messages postés mercredi 9 janvier 2002Date d'inscription 20 février 2017 Dernière intervention - 26 oct. 2007 à 11:54
0
Utile
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]
Commenter la réponse de Zobibol
cs_bultez 13619 Messages postés jeudi 13 février 2003Date d'inscription 15 octobre 2013 Dernière intervention - 26 oct. 2007 à 12:41
0
Utile
    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]
Commenter la réponse de cs_bultez
Zobibol 469 Messages postés mercredi 9 janvier 2002Date d'inscription 20 février 2017 Dernière intervention - 26 oct. 2007 à 13:43
0
Utile
Je vous prépare cela !

[o-_-o]
Commenter la réponse de Zobibol
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 26 oct. 2007 à 13:54
0
Utile
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)
Commenter la réponse de PetoleTeam
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 26 oct. 2007 à 13:58
0
Utile
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)
Commenter la réponse de PetoleTeam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.