J'ai un objet comme suit: et je veux supprimer l'un d'entre eux, par exemple l'objet avec Maintenant, je le fais en utilisant Lodash comme suit: P> ID 2 p> p>
forOwn(object, function(value, key) {
value.id === 2 && delete object[key]
});
4 Réponses :
C'est la bonne façon. Pour le faire dans Json, vous effectuez les suivantes:
var json = { ... }; var key = "foo"; delete json[key];
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 = {...}; code> 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. I>" - non, ils ne le sont pas. Json est une chaîne string i> que vous devez json.parse code> avant de pouvoir supprimer de manière fiable une propriété. L'opérateur code> Supprimer code> est pas i> 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 i> 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é.
J'utiliserais un simple p> pour ... dans code> au lieu de
loadash code>
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)
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
Vous pouvez utiliser Underscorejs bibliothèque Le code ci-dessus supprimera la Objet ayant ID = 3 et retourner p>
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 code> dans mon projet, c'est ainsi que votre solution va bien et je pense que c'est un peu plus propre que mon chemin.
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:
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> Supprimer l'objet [2]; // qui modifie l'objet d'origine code> 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, ...}
}, {});
Bien sûr, cela fonctionne, bien que je préférerais
si code> plutôt que
&& code> - enregistrer le
&& code> 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 B> JavaScript lui-même. Aide
J'ajouterais un chèque null / indéfini (
si (valeur && valeur.id === 2) code>) Pour éviter les cas éventuels nuls / indéfinis et, comme indiqué par @cTerTerferformance, j'utiliserais un si de
&& code> (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 code> ID CODE> est-il toujours le même? Si oui, vous n'avez pas besoin d'une boucle du tout.
Veuillez ajouter la fonction manquante
fournisseur code>.
@Ninascholz Lodash.com/docs/4.17.15#forne
Juste
Supprimer obj ['2'] code> ...