Question

tl; dr; Même sans mon explication, on peut regarder le code ci-dessous et la sortie et voir quelque chose de louche. Splice renvoie l'index qu'il épissé mais les données restent dans le tableau.

J'ai donc un objet qui est calée 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:

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. Ce code, avec l'enregistrement de la console autour de tout (que je vais montrer la sortie 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);
}

Avis sur le deuxième "console.log (this._index);" l'objet épissé fait toujours partie de la matrice d'origine. Je suppose que this._index [2] aurait maintenant un élément moins. De plus, je devrais épissage index 0, mais il retourne l'index 1.

Voici la sortie: Console

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

Merci, Mike

Était-ce utile?

La solution

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 point, il est vraiment le troisième élément que vous supprimez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top