5
votes

Supprimer l'élément du tableau et ne renvoyer que les éléments restants

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 commentaires

Pourquoi ne pas simplement utiliser parse_obj ? .splice() modifie le tableau sur place, donc une fois que vous exécutez parse_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éthode splice() renvoie l'élément supprimé du tableau. Vous essayez d'attribuer cet élément supprimé dans le tableau parse_obj2 . Ce que vous devez faire est de ne rien affecter à la variable parse_obj2 et d'utiliser le tableau parse_obj tel quel. parse_obj.splice(parse_obj.findIndex(e => e.data,1)); new_string = JSON.stringify(parse_obj2);


3 Réponses :


1
votes

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));


0 commentaires

2
votes

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}`);


0 commentaires

0
votes

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;
}


0 commentaires