-2
votes

Comment supprimer l'objet de l'objet d'objets dans JavaScript

J'ai un objet comme suit: xxx pré>

et je veux supprimer l'un d'entre eux, par exemple l'objet avec ID 2 p> p>

Maintenant, je le fais en utilisant Lodash comme suit: P>

forOwn(object, function(value, key) {
     value.id === 2 && delete object[key]
});


7 commentaires

Bien sûr, cela fonctionne, bien que je préférerais si plutôt que && - enregistrer le && car si vous avez besoin de l'expression résultante, ou lorsque le golfing . Vous pouvez facilement supprimer la dépendance sur Lodash si vous voulez aussi bien


Utilisez Supprimer JavaScript lui-même. Aide


J'ajouterais un chèque null / indéfini ( si (valeur && valeur.id === 2) ) Pour éviter les cas éventuels nuls / indéfinis et, comme indiqué par @cTerTerferformance, j'utiliserais un si de && (qui fonctionne, bien sûr, mais ne donne aucun avantage même en lisibilité dans votre cas spécifiquement)


Le nom de la propriété et la valeur ID est-il toujours le même? Si oui, vous n'avez pas besoin d'une boucle du tout.


Veuillez ajouter la fonction manquante fournisseur .


@Ninascholz Lodash.com/docs/4.17.15#forne


Juste Supprimer obj ['2'] ...


4 Réponses :


-1
votes

C'est la bonne façon. Pour le faire dans Json, vous effectuez les suivantes:

var json = { ... };
var key = "foo";
delete json[key];


7 commentaires

S'il vous plaît apprendre La différence entre JSON et la notation littérale objet < / a>. Ni la question ni votre réponse ne sont liées à JSON.


Comme je l'ai mentionné, vous faites de cette façon à Json et c'est la bonne façon. Je sais déjà que JSON et objet n'est pas la même chose! Pas besoin de commenter un tel commentaire non spécifique. Je ne sais pas pourquoi vous avez tous obtenu ce besoin de faire de telles choses. Laisse la vie d'une manière simple!


Cela ne me semble pas inutile. var json = {...}; est sémantiquement trompeur car il s'agit d'un objet littéral et non json.


Comme je viens de dire. Ce n'est pas le même mais dans certains cas, ils agissent similaires. Dans le cas, supprimez, ils sont très similaires.


" Dans l'affaire Supprimer, ils sont très similaires. " - non, ils ne le sont pas. Json est une chaîne string que vous devez json.parse avant de pouvoir supprimer de manière fiable une propriété. L'opérateur Supprimer est pas applicable à JSON.


Si Json est juste une chaîne, ce n'est pas un Json. Évidemment, c'est encore après avoir appelé la fonction d'analyse. L'opérateur de suppression est applicable à JSON!


Vous êtes mal compris que JSON est. JSON est un format de sérialisation de données. C'est toujours une chaîne. Si ce n'est pas une chaîne, ce n'est pas Json. Bien que la notation d'objet dans JavaScript soit similaire et qu'il a manifestement influencé le nom de Json, c'est autre chose. Mais c'est tout décrit dans le lien que j'ai posté dans mon premier commentaire. Dommage que vous n'ayez pas regardé.



0
votes

J'utiliserais un simple pour ... dans code> au lieu de loadash code>

p>

let object = {
   1: {id: 1, name: "One"},
   2: {id: 2, name: "Two"},
   3: {id: 3, name: "Three"}
}


let deleteById = (obj,idToRemove) => {
  for(let key in obj){
    let {id} = obj[key] | {}
    if(id === idToRemove){
      delete obj[key]
    }
  }
}

deleteById(object,2)
console.log(object)


2 commentaires

Ceci est moins simple que le code d'Asseer et plus difficile de lire et de déterminer l'intention d'un coup d'œil, à part le nom de la fonction.


@Chriscrollins C'est juste un simple pour la boucle et si la déclaration, je ne vois pas comment il est moins simple, mis à part qu'il n'utilise pas une bibliothèque uniquement pour une chose intégrée normale qui peut être faite à l'aide de JS natif



1
votes

Vous pouvez utiliser Underscorejs bibliothèque xxx

Le code ci-dessus supprimera la Objet ayant ID = 3 et retourner xxx


3 commentaires

Cela fonctionne, mais pourquoi ajouter une bibliothèque externe si JavaScript l'a déjà mis en œuvre?


J'apprécie mais c'est juste un moyen et dépend de ce que vous voulez faire soit utiliser des sous-traitants, soit une autre solution, il vous tient totalement à vous.


J'utilise déjà lodash dans mon projet, c'est ainsi que votre solution va bien et je pense que c'est un peu plus propre que mon chemin.



1
votes

Je pense que vous n'obtenez pas les réponses que vous recherchez, car vous avez peut-être trop simplifié le cas d'utilisation, il est donc tentant de dire:

Supprimer l'objet [2]; // qui modifie l'objet d'origine code> p>

si vos données ne sont pas si statiques ou si vous souhaitez faire quelque chose de plus complexe pour supprimer certains éléments, vous pouvez faire quelque chose de similaire à celui-ci: P>

const relevantObjects = Object.entries(object) // converts each entry to [key, value]
  .filter(([k, v]) => v.id !== 2) // define the criteria to include/exclude items
  .reduce((acc, [k, v]) => {
    acc[k] = v;
    return acc; // this function can be improved, it converts the [[k, v]] back to {k: v, k: v, ...}
  }, {});


0 commentaires