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

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

Votre réponse

15 réponses

Meilleure réponse
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
- 25 oct. 2007 à 15:14
3
Merci
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]

Merci cs_bultez 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_bultez
Meilleure réponse
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Dernière intervention
20 février 2017
- 25 oct. 2007 à 15:22
3
Merci
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]

Merci Zobibol 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Zobibol
Meilleure réponse
Messages postés
3435
Date d'inscription
lundi 26 décembre 2005
Dernière intervention
14 janvier 2011
- 25 oct. 2007 à 17:22
3
Merci
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)

Merci PetoleTeam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de PetoleTeam
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
- 25 oct. 2007 à 15:01
0
Merci
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
Messages postés
166
Date d'inscription
mercredi 27 juin 2007
Dernière intervention
31 mars 2014
- 25 oct. 2007 à 15:24
0
Merci
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
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
- 25 oct. 2007 à 15:45
0
Merci
>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
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
- 25 oct. 2007 à 16:19
0
Merci
>>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
Messages postés
13619
Date d'inscription
jeudi 13 février 2003
Dernière intervention
15 octobre 2013
- 25 oct. 2007 à 18:12
0
Merci
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
Messages postés
166
Date d'inscription
mercredi 27 juin 2007
Dernière intervention
31 mars 2014
- 25 oct. 2007 à 23:13
0
Merci
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
Messages postés
166
Date d'inscription
mercredi 27 juin 2007
Dernière intervention
31 mars 2014
- 25 oct. 2007 à 23:15
0
Merci
Par contre, comment fait-on un prototypage sur Array ou autre ??

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

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