2009-12-09 4 views
0

tl; dr; Même sans mon explication, on peut regarder le code ci-dessous et la sortie et voir quelque chose est louche. Splice renvoie l'index épissé mais les données restent dans le tableau. J'ai donc un objet qui est presque comme un tableau (0,1,2,3 ... etc). Chaque clé d'objet a une valeur de tableau. Le tableau est un tableau d'objets. Voici un objet simplifié qui montre la structure de base, je travaille avec:Épissure Javascript non épissée

obj = { 
    '1': [{},{},{},{}], 
    '2': [{},{},{},{}], 
    '3': [{},{},{},{}] 
}; 

J'ai un code qui a besoin d'épissure sur l'un des indices de tableau (objets) d'un de ces tableaux. C'est le code, avec la consignation de la console autour de tout (que je vais montrer la sortie de ci-dessous).

console.log(indices_to_remove); 
for(j = 0; j < indices_to_remove.length; j++) { 
    console.log("i: " + i) 
    console.log('j: ' + j) 
    console.log(this._index); 
    console.log(this._index[i].splice(indices_to_remove[j], 1)); 
    console.log(this._index); 
} 

Notez sur le second "console.log (this._index);" l'objet épissé fait toujours partie du tableau original. Je suppose que this._index [2] aurait maintenant un article de moins. En outre, je devrais être épissage index 0, mais il retourne 1.

index

Voici le résultat: Console

Donc, si quelqu'un a une idée de ce que je pourrais faire mal s'il vous plaît parler!

Merci, Mike

+1

considéré comme JSON? – yoda

+0

JSON est génial, mais je ne peux pas vraiment tout réécrire pour supporter cela maintenant. Ma question est vraiment pourquoi épissure semble fonctionner mal dans ce cas. –

+0

@yoda: Qu'est-ce que JSON a à voir avec ça? –

Répondre

4

Il y a beaucoup manquant dans le code que vous montrez, donc je devais faire des devinettes. J'ai couru ce code, et il fonctionne comme prévu:

var obj = { 
    '1': [{},{},{},{}], 
    '2': [{},{},{},{}], 
    '3': [{},{},{},{}] 
}; 

var indices_to_remove = [1]; 

var i = 1; 
alert(indices_to_remove); 
for(j = 0; j < indices_to_remove.length; j++) { 
    alert("i: " + i) 
    alert('j: ' + j) 
    alert(obj[i]); 
    alert(obj[i].splice(indices_to_remove[j], 1)); 
    alert(obj[i]); 
} 

Cependant, vous devriez envisager une boucle en arrière dans le tableau d'index pour supprimer. Lorsque vous avez supprimé le premier élément, le deuxième élément est maintenant le premier élément. Si vous supprimez ensuite le deuxième élément, c'est vraiment le troisième élément que vous supprimez.