Estoy tratando de convertir la parte de métodos de un enrutador Express en una matriz unidimensional de palabras en mayúsculas, así que esto:
layer.route.methods: { get: true, post: true }dentro:
methods: ["GET", "POST"]Esto es lo que se me ocurrió, pero ¿no hay una forma más sutil?
const methods = []; !layer.route.methods.get || methods.push('GET'); !layer.route.methods.post || methods.push('POST');Esto se puede lograr con una combinación de filter (para obtener solo los métodos con true ) y map (para escribir en mayúscula).
const methods = { get: true, post: true }; const result = Object.keys(methods).filter(method => methods[method]).map(method => method.toUpperCase()); console.log(result);Reduzca el objeto a una matriz usando Object.keys(object) y luego use loop for o map para iterar y verificar si el elemento existe en esa matriz convertida y luego convertirlo a mayúsculas usando item.toUpperCase()
Una de las formas es usar reducer, para filtrar y modificar valores en una iteración.
const inputObject = { get: true, post: true }; const methods = Object.entries(inputObject).reduce( (accumulator, [key, value]) => { if (value) accumulator.push(key.toUpperCase()); return accumulator; }, [] ); console.log(methods);