J'ai le ternaire suivant :

exceptionType == 'Asset' ? selection = selectedAssets.find(function(obj) {return obj.fixedTitle === element}) : selection = dedupedAssets.find(function(obj) {return obj.fixedTitle === element});

J'affecte conditionnellement la variable selection à la valeur renvoyée par find(). Les fonctions sont extrêmement similaires, la seule différence étant le tableau ciblé.

Y a-t-il un moyen de raccourcir cela encore plus?

2
cfoster5 18 mars 2019 à 21:45

2 réponses

Meilleure réponse

Vous pouvez utiliser l'opérateur ternaire pour savoir sur quels éléments itérer et utiliser la logique exécutée une fois au lieu de la dupliquer.

const itemsToIterate = exceptionType == 'Asset' ? selectedAssets : dedupedAssets;

const items = itemsToIterate.find(function(obj) {return obj.fixedTitle === element});

Vous pouvez le modifier un peu pour le rendre encore plus court.

const itemsToIterate = exceptionType == 'Asset' ? selectedAssets : dedupedAssets;

const items = itemsToIterate.find(({ fixedTitle }) => fixedTitle === element);
4
Sushanth -- 18 mars 2019 à 18:55

Vous pouvez utiliser votre condition booléenne comme index pour obtenir le bon tableau auquel appliquer find :

const selection = [dedupedAssets, selectedAssets][+(exceptionType === 'Asset')]
  .find(o => o.fixedTitle === element);

En utilisant l'opérateur +, false sera converti en 0 et dedupedAssets sera retourné, et true sera converti en 1 et selectedAssets sera retourné.

Exemple d'indexation

const a = [{ title: 'hello' }];
const b = [{ title: 'world' }];

console.log([a, b][+false].find(o => o.title === 'hello'));
console.log([a, b][+true].find(o => o.title === 'world'));
1
jo_va 18 mars 2019 à 19:26