Closed Bonvallot closed 1 month ago
Tout fonctionne comme c'est censé fonctionner en fait. Le problème ne vient pas de l'utilisation du transformer "Array" mais de l'utilisation de "Get".
Pour info, les transformers testent le type des données et s'adaptent en fonction. Puisque le 1er exemple renvoyé après "Get" est un string, le transformer transforme la chaîne en tableau. Dans les cas où ce sont déjà des tableaux le transformer va agir su chaque élement du tableau, et donc transformer chaque chaîne ou élément en tableau et c'est pourquoi on obtient un tableau de tableaux.
L'utilisation du transformer "Array" dans ce contexte revient à exécuter ce code .map(item=>_.castArray(item))
quand on a un tableau,
et simplement .castArray()
quand c'est une chaîne.
Le résultat du transformer "Array" est donc tout à fait normal.
Le problème apparaît à l'utlisation de "Get" car on voit que pour le 1er exemple on n'a bien un tableau d'une seule valeur
c'est l'usage de "Get" qui transforme ce taleau d'une valeur en un string.
Mais ce n'est pas un bug, en vérifiant le code du transformer "Get" il y a bien une ligne qui spécifie que si le tableau contient exactement 1 élément alors on renvoie directement l'élément sous forme de chaîne. Si le tableau est vide ou s'il contient pus d'un élément on renvoie le tableau d'origine >> https://github.com/Inist-CNRS/lodex/blob/master/packages/transformers/src/operations/GET.js
ligne 8 :
return values.length === 1 ? values[0] : values;
A voir si @touv veut modifier le code de ce transformer et si cette ligne en particulier a une utilité. Si non je pense qu'il suffit de remplacer par return values;
Pour l'heure, le problème peut être résolu en passant par le mode enrichissement en écrivant simplement
[assign] path=value value=get("value.chemTag.chemical")
le get de Lodash ne modifiant pas la structure des données.
Le Transformer GET est peut-être le Transformer le plus utilisé, du coup, modifier son comportement risque de casser beaucoup de modèles. Je préférais modifier le comportement du transformer ARRAY pour éviter de créer des matrices car l'idée de ce Transformer était d’homogénéiser les types de données pour être certain de créer un tableau de valeurs directement exploitable par le format liste.
ok ok je comprends l'argument, par contre je laisse la main pour la résolution car pour moi le code spécifie déjà de ne pas créer de tableau si l'on a déjà un tableau... `export const valueToArray = value => { const arr = Array.isArray(value) ? value : [value]; return arr.filter(x => x); };
https://github.com/Inist-CNRS/lodex/blob/master/packages/transformers/src/operations/ARRAY.js`
Décrire le bogue Lorsqu'on lance le transformer Array, il crée un tableau quand il n'y a qu'une valeur. Il crée un tableau de tableau quand il y a plusieurs valeurs
Reproduire Étapes pour reproduire le comportement :
Comportement attendu Ne pas créer de tableaux dans le tableau mais avoir un seul tableau avec plusieurs valeurs ["HD 101065"] ["Iron","iron","sugar","haem iron"]
Captures d'écran Le cas échéant, ajoutez des captures d'écran pour expliquer votre problème.
Environnement (veuillez compléter les informations suivantes) :
Contexte supplémentaire Pour contourner l'actuel Array, on enchaîne un Join puis un Split