Quiero verificar un montón de variables en busca de valores falsos.
En lugar de escribir una declaración if muy larga, por ejemplo:
if (!userData.email || !userData.lastName || ! userData.firstName etc...Quería poner estos valores en una matriz y simplemente verificar la matriz, por ejemplo:
var detailsConditionsArr = [ userData.firstName, userData.lastName, userData.email, userData.phone, userData.address, userData.mailAddress, ] if (detailsConditionsArr.indexOf(false) === 1) { console.log("Found a falsy"); }Pero lo anterior no funciona (si la declaración nunca se activa).
Los valores pueden ser false , null o '' .
¿Hay alguna manera de verificar esto desde la matriz?
Caso de uso ideal para Array#some
Verifique el valor falso en la iteración, si la prueba tiene éxito, se devolverá true .
var A = ["Name", ""]; var B = ["Name", "30"]; var C = ["Name", "30", null]; if (A.some(el => !el)) { console.log("Found a falsy in A"); } if (B.some(el => !el)) { console.log("Found a falsy in B"); } if (C.some(el => !el)) { console.log("Found a falsy in C"); }Puede usar los nombres de clave que desea verificar como una matriz, luego haga la verificación de esta manera:
const userData = { email: '', lastName: '', firstName: '' }; const hasFalsy = ['email', 'lastName', 'firstName'].some(k => !Boolean(userData[k])); if (hasFalsy) { console.log('found a falsy'); }Puede usar reducir para devolver un solo valor de la matriz de esta manera:
var detailsConditionsArr = [ userData.firstName, userData.lastName, userData.email, userData.phone, userData.address, userData.mailAddress, ] if (detailsConditionsArr.reduce((carry, el)=> el ? carry : true, false)) { console.log("Found a falsy"); }