Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

155
Vistas
implementar una función que agrega una validación de tipo a un objeto

Su función debe recibir un objeto como su único argumento y devolver un objeto con las mismas propiedades, pero con validación de tipo agregada. Los tipos deben validarse cuando:

  • la función crea el objeto;
  • Alguien actualiza una propiedad;
  • Alguien agrega una propiedad;

La validación del tipo siempre debe basarse en la última parte del nombre de la propiedad. Por ejemplo, la propiedad age_int siempre debe ser un número entero y arrojar un error cuando se establece en otra cosa

Estos son los tipos posibles:

  • cadena: por ejemplo, "tipo de cadena"
  • int: 12.00 y 12 son números enteros.
  • flotante: por ejemplo, 12.34
  • número: cualquier int o float
  • bool: por ejemplo, verdadero

suposiciones

  • Los tipos son opcionales y la validación debe omitirse si no se especifica el tipo.
  • siempre precede al nombre del tipo.

Ejemplos

Su función debe comportarse como se muestra a continuación:

 const obj= { age_int: 2, name_string:"John", Job: null, } const validatingbject=typeCheck(obj) validatingobject.age_int=2.25 // Throws error validatingbject.age.int= 2 validatingoject.job="fireman" validatingbject.address_string= 20 // Throws error const obj_2= {employed_bool: "true",} const validatingobject = typeCheck(obj_2) // Throws error

Intenté el siguiente código pero no tuve éxito.

 function typeCheck(object) { console.log(Object.entries(object)); Object.entries(object).forEach(([key, value]) => { let type = key.split('_').pop(); let typecheck; console.log("type:", type); if (type === "float" || type === "int" || type === "number") { typecheck = "number"; } else if (type === "bool") { typecheck = "boolean"; } else if (type === "string") { typecheck = "string"; } if (typeof value == typecheck) { return true; } else { console.error("error") } }); } const obj = { age_int: 2, name_string: "John", Job: null, } const validatingbject = typeCheck(obj);

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

typeof value == typecheck , debe tener paréntesis, para dejar claro cómo se comporta:

 typeof "string" == 33 // false typeof ("string" == 33) // 'boolean' (typeof "string") == 33 // false

Tenga cuidado con su split , no se produce un error si no hay un guión bajo presente:

 "age".split('_').pop(); // "age" "age_int".split('_').pop(); // "int" "int".split('_').pop(); // "int" <-- this may throw you off

Compruebe que tiene un guión bajo _ con un tipo válido ( "int" , "string" , cualquiera de sus tipos personalizados) para cada tecla. Si no, omite la iteración.

Tal vez desee utilizar throw new Error("message") , si desea detener la ejecución del programa.

Su código parece funcionar como espera, si soluciona el problema de split .

Por si acaso, tal vez esté buscando Typescript , class-validator o sí (o cualquier equivalente).


Editar: Veo que también desea que se devuelva un objeto const validatingbject=typeCheck(obj) , pero la función typecheck no contiene una declaración de devolución.

Si desea que validatingobject.age_int=2.25 tenga un error, primero debe tener un setter ... aquí tiene, esto debería ayudarlo:

 function validateTypeOrThrow(e, type) { if (type === 'int' && !Number.isInteger(e)) { throw new Error(`${e} is not a ${type} !`); } } const obj = {}; obj._age_int = 33; // initial value // _age_int starting with underscore is convention for private Object.defineProperty(obj, 'age_int', { set(value) { // this will infinite loop // this.age_int = value; this._age_int = value; }, get () { // this will infinite loop // return this.age_int; validateTypeOrThrow(this._age_int , 'int'); return this._age_int; }, }); console.log(obj.age_int); obj.age_int = 22; console.log(obj.age_int) obj.age_int = 'str'; // no error console.log(obj.age_int) // error
about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí está la solución Usando include()

 function typeCheck(object) { for (key in object) { if (key.includes('string')) { console.log(object[key]); if (typeof(object[key]) != 'string') { throw Error; } } else if (key.includes('int') || key.includes('float') || key.includes('number')) { console.log(object[key]); if (typeof(object[key]) != 'number') { throw Error; } else if (key.includes('int')) { if (Number.isInteger(object[key])) { console.log("true"); } else { throw Error; } } else if (key.includes('float')) { if (Number.isInteger(object[key])) { throw Error; } else { console.log("true"); } } } else if (key.includes('bool')) { if (typeof(object[key]) != 'boolean') { throw Error; } } else if (typeof(object[key] == 'object')) { console.log('object' + " " + object[key]); } else { return object; } } return object; } const obj = { age_int: 23, name_string: "name", age_float: 22.4, Job: null, } const validatingbject = typeCheck(obj); console.log(validatingbject); validatingbject.job = "fireman"; validatingbject.age_int = 2.25; typeCheck(obj); const obj_2 = { employed_bool: "true", } validatingbject = typeCheck(obj_2)

about 4 years ago · Juan Pablo Isaza Denunciar

0

function isInt(n) { return Number(n) === n && n % 1 === 0; } function isFloat(n) { return Number(n) === n && n % 1 !== 0; } function isString(s) { return typeof s === "string"; } function isBoolean(val) { return "boolean" === typeof val; } function isNum(n) { return typeof n === "number"; } function checktype(key, value, typeMap) { if (typeMap[key]) { if (typeMap[key] === "string") { if (!isString(value)) throw new Error("String Error"); } if (typeMap[key] === "number") { if (!isNum(value)) throw new Error("Num Error"); } if (typeMap[key] === "float") { if (!isFloat(value)) throw new Error("Float Error"); } if (typeMap[key] === "int") { if (!isInt(value)) throw new Error("Int Error"); } if (typeMap[key] === "bool") { if (!isBoolean(value)) throw new Error("Boolean Error"); } } } function typeCheck(obj) { var result = {}; var keys = {}; Object.keys(obj).forEach((o) => { let val = o.split("_"); val = val[val.length - 1]; keys[o] = val; }); for (const key in obj) { var value = obj[key]; Object.defineProperty(result, key, { enumerable: true, configurable: true, set(nv) { checktype(key, nv, keys); value = nv; }, get() { return value; }, }); } return result; }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda