J'ai un objet qui ressemble à ceci:
var obj = {
"objectiveDetailId": 285,
"objectiveId": 29,
"number": 1,
"text": "x",
"subTopics": [{
"subTopicId": 1,
"number": 1
}, {
"subTopicId": 2,
"number": 32
}, {
"subTopicId": 3,
"number": 22
}]
}
var stToDelete = 2;
J'ai lodash
installé dans mon application pour d'autres choses. Existe-t-il un moyen efficace d'utiliser lodash
pour supprimer l'entrée: {"subTopicId":2, "number":32}
de l'objet obj
?
Ou existe-t-il un moyen javascript de le faire?
Comme le soulignent les lyonnais dans les commentaires, une façon plus idiomatique et lodash de faire cela serait d'utiliser _.remove
, comme ceci
_.remove(obj.subTopics, {
subTopicId: stToDelete
});
En dehors de cela, vous pouvez transmettre une fonction de prédicat dont le résultat sera utilisé pour déterminer si l'élément actuel doit être supprimé ou non.
_.remove(obj.subTopics, function(currentObject) {
return currentObject.subTopicId === stToDelete;
});
Sinon, vous pouvez créer un nouveau tableau en filtrant l'ancien avec _.filter
et en l'affectant au même objet, comme ceci
obj.subTopics = _.filter(obj.subTopics, function(currentObject) {
return currentObject.subTopicId === stToDelete;
});
Ou
obj.subTopics = _.filter(obj.subTopics, {subTopicId: stToDelete});
vous pouvez le faire avec _pull
.
_.pull(obj["subTopics"] , {"subTopicId":2, "number":32});
vérifier la référence
Vous pouvez maintenant utiliser _.reject qui vous permet de filtrer en fonction de ce que vous devez supprimer, au lieu de ce que vous devez conserver.
contrairement à _.pull
ou _.remove
qui ne fonctionne que sur des tableaux, ._reject
fonctionne sur toutes les variables Collection
obj.subTopics = _.reject(obj.subTopics, (o) => {
return o.number >= 32;
});
En plus de la réponse @thefourtheye, utilisez prédicat au lieu des fonctions anonymes traditionnelles:
_.remove(obj.subTopics, (currentObject) => {
return currentObject.subTopicId === stToDelete;
});
OR
obj.subTopics = _.filter(obj.subTopics, (currentObject) => {
return currentObject.subTopicId === stToDelete;
});
Voici la fonction lodash simple avec tableau et le supprimer avec le numéro d’index.
index_tobe_delete = 1
fruit = [{a: "Apple"}, {b: "banana"}, {c: "choco"}]
_.filter(fruit, (value, key)=> {
return (key !== index_tobe_delete)
})
lodash et TypeScript
let stToDelete = 2;
const clearSubTopics = _.filter(obj.subTopics, topic = (!_.isEqual(topic.subTopicId, stToDelete)));
console.log(clearSubTopics);