Pour supprimer des objets d'un tableau en fonction d'une propriété spécifique, utilisez des méthodes JavaScript natives et évitez les problèmes causés par la diminution de la longueur lors de l'épissure opérations.
Tout d'abord, déterminez les objets à supprimer et stockez-les dans une variable, telle que listToDelete. Ensuite, parcourez le tableau d'objets (arrayOfObjects) et vérifiez si la propriété ID de l'objet correspond à un ID dans listToDelete. Si une correspondance est trouvée, utilisez splice pour supprimer l'objet de arrayOfObjects.
Pour résoudre le problème de diminution de la longueur lors des opérations d'épissage, décrémentez la variable i chaque fois qu'un objet est supprimé. Vous pouvez également écrire les éléments à conserver sur le tableau :
<code class="javascript">for (var i = 0; i < arrayOfObjects.length; i++) { var obj = arrayOfObjects[i]; if (listToDelete.indexOf(obj.id) !== -1) { arrayOfObjects.splice(i, 1); i--; } }
<code class="javascript">var end = 0; for (var i = 0; i < arrayOfObjects.length; i++) { var obj = arrayOfObjects[i]; if (listToDelete.indexOf(obj.id) === -1) { arrayOfObjects[end++] = obj; } } arrayOfObjects.length = end;
Pour une recherche efficace dans les environnements d'exécution modernes, utilisez un jeu de hachage :
<code class="javascript">const setToDelete = new Set(listToDelete); ... if (setToDelete.has(obj.id)) {...}
Enfin, encapsulez la logique dans une fonction réutilisable pour une utilisation pratique :
<code class="javascript">const filterInPlace = (array, predicate) => { let end = 0; for (let i = 0; i < array.length; i++) { const obj = array[i]; if (predicate(obj)) { array[end++] = obj; } } array.length = end; };</code>
Cette approche supprime efficacement les objets d'un tableau en faisant correspondre leurs valeurs de propriété et garantit des performances optimales en évitant les opérations en temps linéaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!