2011-09-02 4 views
1

im faire un test sur la suppression des objets dans un tableau ... car ceci est un test, cela est plutôt un code informel ..la suppression d'un objet spécifique dans un tableau javascript

<script type="text/javascript"> 

// initialize array and objects 
var fruits = new Array(); 

var z = { 
    test1: "test0", 
    test2: "test2" 
} 

fruits.push(z); 
var z2 = { 
    test1: "test1", 
    test2: "test2" 
} 
fruits.push(z2); 
var z3 = { 
    test1: "test2", 
    test2: "test2" 
} 
fruits.push(z3); 
var z4 = { 
    test1: "test3", 
    test2: "test2" 
} 
fruits.push(z4); 
var z5 = { 
    test1: "test4", 
    test2: "test2" 
} 
fruits.push(z5); 

// display array length 
document.write("array length is " + fruits.length + "<br>"); 

// traverse array 
for(var x = 0; x < fruits.length; x++){ 

    // display object content in array 
    document.write(fruits[x].test1 + " "); 

    // delete object in array where variable test1 is equal to "test2" 
    if(fruits[x].test1 == "test2"){ 
    fruits.splice(x, 1); 
    //document.write("array length is " + fruits.length + "<br>"); 
    } 
} 
</script> 

maintenant ce code fonctionne bien (supprimer un objet sur le tableau) mais il supprime celui après celui que je veux supprimé (dans le code ci-dessus, je veux supprimer l'objet dans l'index 2, mais il supprime l'objet dans l'index 3)

suis-je mal dans ce code?

TIA :)

Répondre

0

Cela devrait fonctionner:

<script type="text/javascript"> 

    // initialize array and objects 
    var fruits = new Array(); 

    var z = { 
     test1: "test0", 
     test2: "test2" 
    } 

    fruits.push(z); 
    var z2 = { 
     test1: "test1", 
     test2: "test2" 
    } 
    fruits.push(z2); 
    var z3 = { 
     test1: "test2", 
     test2: "test2" 
    } 
    fruits.push(z3); 
    var z4 = { 
     test1: "test3", 
     test2: "test2" 
    } 
    fruits.push(z4); 
    var z5 = { 
     test1: "test4", 
     test2: "test2" 
    } 
    fruits.push(z5); 

    // display array length 
    document.write("array length is " + fruits.length + "<br>"); 

    // traverse array 
    for(var x = 0; x < fruits.length; x++){ 

     // display object content in array 
     document.write(fruits[x].test1 + " "); 

     // delete object in array where variable test1 is equal to "test2" 
     if(fruits[x].test1 == "test2"){ 
     fruits.splice(x-1, 1); 
     //document.write("array length is " + fruits.length + "<br>"); 
     } 
    } 
    </script> 
+0

merci pour votre réponse mike :) Malheureusement, j'ai essayé cette solution il y a un certain temps, mais il n'a toujours pas fait le travail ... avez-vous d'autres idées? merci encore :) – jason

6

Vous ne devriez jamais tenter de modifier un tableau en itérer il. Au lieu de cela, enregistrez l'index de l'élément que vous souhaitez supprimer dans une variable et supprimez-le après la boucle for.

+0

qui l'a fait: D merci beaucoup :) – jason

0

Utiliser '' filtre '' comme dans implemented underscore.js:

_.filter(fruits, function (fruit) { 
    return fruit.test1 !== "test2"; 
}); 

Cela a l'avantage d'utiliser une méthode rapide native JavaScript ('' filtre '') le cas échéant.

+0

merci pour votre réponse Adrian, je vais aussi essayer cette solution de contournement :) – jason

Questions connexes