Dans Lodex, de nombreuses colonnes ou valeurs peuvent contenir des objets (paires clé-valeur) : noms d’auteurs, adresses, informations bibliographiques… Lodash offre de nombreuses fonctions pour les parcourir, les transformer ou les enrichir.
Certaines fonctions ci-dessous sont exclusives aux objets, tandis que d’autres s’appliquent plus largement aux collections (tableaux ou objets). Cette feuille se concentre sur les fonctions spécifiques aux objets. Les fonctions applicables aux collections seront abordées ici.
ℹ️ Information
Vous pouvez tester chaque exemple dans EZS Playground. Ecrivez l’input de cette façon :
[
{
"value": {
"title": "Mouvement historique et histoire suspendue",
"year": 2012,
"source": "Vingtième Siècle Revue d histoire",
"authors": [
{
"forename": "Hartmut",
"surname": "Rosa",
"fullname": "Hartmut Rosa"
},
{
"forename": "Johann",
"surname": "Chapoutot",
"fullname": "Johann Chapoutot"
}
]
}
}
]
puis collez ce script que vous adapterez.
[use]
plugin = basics
[JSONParse]
separator = *
[replace]
path = entree
value = get("value.title")
[dump]
indent = true
get
Récupère la valeur d’une clé (y compris dans des objets imbriqués).
value = get("value.title")
// → Sortie : "Mouvement historique et histoire suspendue"
set
Modifie ou crée une clé avec une nouvelle valeur.
⚠️ Attention
Fonction mutante Cette fonction modifie la structure passée en argument. Dans un pipeline, cela peut entraîner des effets de bord si la valeur est réutilisée.
value = get("value.entree").set("DOI", null)
// Entrée : [{"value":{"entree":{"title":"Exemple"}}}]
// Sortie : [{"value":{"entree":{"title":"Exemple","DOI":null}},"sortie":{"title":"Exemple","DOI":null}}]
L’objet initial entrée est également modifié.
✅ Alternative non mutante recommandée : cloneDeep
value = get("value.entree").cloneDeep().set("DOI", null)
// Entrée : [{"value":{"entree":{"title":"Exemple"}}}]
// Sortie : [{"value":{"entree":{"title":"Exemple"}},"sortie":{"title":"Exemple","DOI":null}}]
update
Met à jour la valeur d’une clé à l’aide d’une fonction.
value = get("value").update("year", y => y + 1)
// → Sortie : "year": 2013
has
Vérifie si une clé existe ou non.
value = get("value").has("source")
// → Sortie : true
omit
Retourne un nouvel objet sans certaines clés.
value = get("value").omit(["source", "year"])
// → Sortie : { title: "Mouvement historique et histoire suspendue", authors: [...] }
pick
Retourne un nouvel objet avec uniquement certaines clés.
value = get("value").pick(["title", "year"])
// → Sortie : { title: "Mouvement historique et histoire suspendue", year: 2012 }
keys
Retourne les clés d’un objet.
value = get("value").keys()
// → Sortie : ["title", "year", "source", "authors"]
values
Retourne les valeurs d’un objet.
value = get("value").values()
// → Sortie : ["Mouvement historique...", 2012, "Vingtième Siècle Revue d histoire", [ ... ]]
toPairs
Convertit un objet en un tableau de paires [clé, valeur]. Chaque élément du tableau résultant est un tableau à deux éléments : le premier est la clé (ou le nom de la propriété), et le second est la valeur associée.
value = get("value").toPairs()
// → Sortie : [["title","Mouvement historique..."], ["year", 2012], ...]
mapValues
Applique une fonction à toutes les valeurs d’un objet.
value = get("value").mapValues(value => _.isString(value) ? value.toUpperCase() : value)
// → Sortie : {"title": "MOUVEMENT HISTORIQUE ET HISTOIRE SUSPENDUE","year": 2012,"source": "VINGTIÈME SIÈCLE REVUE D HISTOIRE"...}
// → Si une valeur est une chaîne de caractères, on la passe en majuscules.
mapKeys
Applique une fonction à toutes les clés d’un objet.
value = get("value").mapKeys((value, key) => key.toUpperCase())
// → Sortie : {"TITLE": "Mouvement historique et histoire suspendue","YEAR": 2012,"SOURCE": "Vingtième Siècle Revue d histoire"...}
invert
Inverse les clés et valeurs.
value = get("value").invert()
// → Sortie : {"2012": "year","Mouvement historique et histoire suspendue": "title"...}
transform
Transforme un objet en un autre en appliquant une fonction à chaque clé/valeur.
value = get("value").transform((result, val, key) => {result[key] = _.isNumber(val) ? val + 10 : val}, {})
// → Sortie : "year": 2022
// → Si une clé a comme valeur un nombre, on y ajoute 10.