Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda