2017-09-01 3 views
1

En Lodash, est-il un moyen de faire quelque chose comme:Dans Lodash (JavaScript), existe-t-il une fonction permettant de renvoyer la première valeur "véridique" ou "significative"?

foo = firstTruthy(foo, bar, 10); 

de telle sorte que la première valeur « truthy » est attribué à foo? La "vérité" est citée parce que certaines valeurs, telles que 0 ou "" aimeraient être considérées comme véridiques.


Informations générales: en JavaScript, si nous

foo = foo || 10; 

de sorte que si foo est définie, il est réglé sur 0, mais il y a un hic: si foo est 0, il est également traité comme une falsification et donc foo est attribué 10. Dans Lodash ou JavaScript générique, est-il possible de faire quelque chose comme

foo = firstTruthy(foo, 10);   // this 
foo = firstTruthy(foo, bar, 10); // or this 

de sorte que la première valeur truey est affectée à foo, où la vérité est considérée comme étant: tout ne pas false, null ou undefined? (donc même 0 ou "" est considéré comme véridique, similaire à Ruby).

Répondre

3

Vous utilisez abusivement le terme "véridique" si vous ne voulez pas a = b || c. Les valeurs "Truthy" sont bien définies et vous ne pouvez pas inclure arbitrairement d'autres valeurs dans cette définition comme 0 ou "".

Si vous voulez écrire votre propre « affecter la valeur qui est soit truthy ou nul ou une autre combinaison de conditions », utilisez Array#find:

var value = [foo, bar, baz].find(x => x || x == 0 || x == ""); 
0

Vous pouvez faire quelque chose comme ceci:

function firstTruthy(...args) { 
    return args.find(arg => arg !== null && arg !== undefined && arg !== false); 
} 
0

Vous pouvez vérifier les valeurs pour truthyness ou vérifier avec Array#includes.

const firstTruthy = (...array) => array.find(a => a || [0, ''].includes(a)); 
 

 
console.log(firstTruthy(undefined, null, 10)); // 10 
 
console.log(firstTruthy(undefined, 0, 10)); // 0 
 
console.log(firstTruthy(false, '', 10));  // ''

0

Ne pas utiliser le terme "truthy" en parlant pas de définition très précise de Javascript de ce qui est "truthy". Ce que vous demandez est quelque chose que j'utilise pour désigner comme quelque chose vs rien. AFAIK Lodash n'a pas une telle fonction. Voici mon go-to solution pour elle:

/** 
* Return the first provided value that is something, or undefined if no value is something. 
* undefined, null and NaN are not something 
* All truthy values + false, 0 and "" are something 
* @param {*} values Values in order of priority 
* @returns {*} The first value that is something, undefined if no value is something 
*/ 
function getSomething(...values) { 
    return values.find(val => val !== null && val !== undefined && !Number.isNaN(val)); 
} 

La différence ici de ce que vous demandez est que ma fonction considère false être quelque chose. C'est facilement ajusté pour.

+0

oui, "quelque chose" ou "hasMeaning" ... si le compte bancaire de quelqu'un a 1 dollar, alors c'est vrai, alors avoir 0 $ ne devrait pas être faux parce que c'est une valeur de compte valide. De même pour la recherche par chaîne, si la clé de recherche est trouvée à la position 0, elle est également trouvée, identique à 1 ou 20. –