Usos extraños de la validación

Se necesitan validadores para la validación. Olvidémoslo por diversión. Analicemos la estructura de datos anidados usando el validador. ¡Loco, dices!







imagen Nórdica SI







¿A dónde correremos?



Repasemos la guía telefónica:







const phoneBook = {
  andrew: ["+345356245254", "+313232312312"],
  vasilina: ["+132313123123"],
  serhiy: ["+587234878234", "+321323124123"],
};
      
      





¿Qué queremos conseguir?



Consigamos una lista de todos los números.







¿Cómo lo hacemos?



Haremos esto en 4 pasos:







  • Conectemos la biblioteca para la validación de datos.
  • Creemos una función de validación regular
  • Agregue el efecto secundario de recopilar números en una matriz
  • Envolvemos en una función


Usaremos la biblioteca de validación quartet



:







import { v } from "quartet";
      
      





Escribamos una función de validación:







const checkPhoneBook = v({
  [v.rest]: v.arrayOf(v.string),
});
      
      





, :







checkPhoneBook({}); // true
checkPhoneBook({ andrew: ["123321"] }); // true
checkPhoneBook({ andrew: null }); // false
      
      





: .







const phoneNumbers = [];
const checkAndCollect = v({
  [v.rest]: v.arrayOf(
    v.and(
      v.string,
      v.custom((phoneNumber) => {
        phoneNumbers.push(phoneNumber);
        return true;
      })
    )
  ),
});
      
      





:







checkAndCollect({
  andrew: ["+345356245254", "+313232312312"],
  vasilina: ["+132313123123"],
  serhiy: ["+587234878234", "+321323124123"],
});
      
      





true



. ! : phoneNumbers



.







console.log(phoneNumbers);
// [
//   '+345356245254',
//   '+313232312312',
//   '+132313123123',
//   '+587234878234',
//   '+321323124123'
// ]
      
      





«»:







import { v } from "quartet";

/**
 * @param {Record<string, string[]>} phoneBook
 * @returns {string[]} phone numbers
 */
function collectPhoneNumbers(phoneBook) {
  const phoneNumbers = [];

  const checkAndCollect = v({
    [v.rest]: v.arrayOf(
      v.and(
        v.string,
        v.custom((phoneNumber) => {
          phoneNumbers.push(phoneNumber);
          return true;
        })
      )
    ),
  });

  checkAndCollect(phoneBook);

  return phoneNumbers;
}
      
      







. production . :







  • . — .
  • . .
  • . .
  • Hay un código más adecuado para esta tarea:


/**
 * @param {Record<string, string[]>} phoneBook
 * @returns {string[]} phone numbers
 */
function collectPhoneNumbers(phoneBook) {
  const phoneNumbers = [];

  const personNames = Object.keys(phoneBook);

  for (const personName of personNames) {
    const personPhoneNumbers = phoneBook[personName];
    phoneNumbers.push(...personPhoneNumbers);
  }

  return phoneNumbers;
}
      
      





Epílogo



Este es el tipo de diversión que se me ocurrió el domingo por la noche. ¿Qué es lo extraño que te viene a la mente? Escribe en los comentarios.








All Articles