Je dois supprimer un élément d'un tableau et ne renvoyer que les éléments restants.
J'ai essayé avec l' splice
et le filter
mais je n'arrive pas à le faire fonctionner.
Avec splice
il ne renvoie que l'élément supprimé, j'ai besoin du contraire.
var parse_obj = JSON.parse(document.getElementById('imagens').value); function rImagem(data){ data = data - 1; document.getElementsByClassName("btn_remover")[data].style.display = 'none'; parse_obj2 = parse_obj.splice(parse_obj.findIndex(e => e.data,1)); new_string = JSON.stringify(parse_obj2); document.getElementById('imagens').value = new_string; }
3 Réponses :
Dans votre scénario, vous pouvez utiliser le filter
pour filtrer les index que vous ne voulez pas dans le tableau résultant. Le premier paramètre du rappel que vous passez dans le filtre est l'élément courant ele
et le second est l'index de l'élément courant idx
:
var indexToRemove = 2; var arr = [1, 2, 3, 4, 5]; arr.splice(indexToRemove, 1); //removes only the third element and modifies the original array in place. console.log(arr);
Ici, disons que je veux supprimer l'élément au troisième index afin que je compare l'index actuel dans le rappel de la fonction de filtre avec l'index de l'élément que je veux supprimer. Il en résultera un nouveau tableau avec tous les éléments du tableau d'origine uniquement sans l'élément dont je voulais supprimer l'index.
parse_obj.splice(parse_obj.findIndex(e => e.data,1), 1); //parse_obj is one element less.
Le même résultat peut être obtenu par splice
également.
var indexToRemove = 2; var arr = [1, 2, 3, 4, 5]; var result = arr.filter((data, idx) => idx !== indexToRemove ); console.log(result);
Voici la démo:
parse_obj2 = parse_obj.filter((ele, idx) => idx !== parse_obj.findIndex(e => e.data,1));
Array#splice
est en fait ce que vous recherchez. Le problème est que splice ne renvoie pas le nouveau tableau, il supprime le ou les éléments du tableau et renvoie les éléments supprimés. Cependant, dans le tableau d'origine, vous aurez les mêmes éléments à l'exception de ceux supprimés.
let array = [1, 2, 3, 4, 5]; let toDelete = [2, 4]; console.log(`Original array elements: ${array}`); console.log(`Elements to delete: ${toDelete}`); let newArray = array.filter(n => !toDelete.includes(n)); console.log(`Array elements after splice: ${newArray}`);
Si vous ne souhaitez pas modifier le tableau d'origine, vous pouvez toujours utiliser le filtre:
let array = [1, 2, 3, 4, 5] console.log(`Array elements before splice: ${array}`); console.log(`Deleted elements: ${array.splice(1, 2)}`); console.log(`Array elements after splice: ${array}`);
Hé, j'ai rencontré une solution simple à cela sans utiliser splice () en utilisant la déstructuration.
const myArr = [1,2,3,4,5,6,7,8,9,10]; function removeFirst(array){ const [a, ...arr] = array; //a is never returned return arr; }
Pourquoi ne pas simplement utiliser
parse_obj
?.splice()
modifie le tableau sur place, donc une fois que vous exécutezparse_obj.splice
ce sera le tableau avec l'élément supprimé.splice renvoie le tableau des éléments supprimés. pouvez-vous ajouter des données aléatoires? le filtre devrait fonctionner
splice()
méthodesplice()
renvoie l'élément supprimé du tableau. Vous essayez d'attribuer cet élément supprimé dans le tableauparse_obj2
. Ce que vous devez faire est de ne rien affecter à la variableparse_obj2
et d'utiliser le tableauparse_obj
tel quel.parse_obj.splice(parse_obj.findIndex(e => e.data,1));
new_string = JSON.stringify(parse_obj2);