Tengo un objeto JS del que extraeré una matriz de claves (usando Object.keys() ) y luego quiero usar esas mismas claves para crear un objeto diferente, pero esta vez con sus valores inicializados en null .
En Python, haría algo como:
list_of_keys = ["key_1", "key_2"] # The * unpacks the list, could be thought as a JS spread operator new_dict = dict.fromkeys(*list_of_keys) Y recuperaría un nuevo diccionario con todos sus valores inicializados en None de forma predeterminada.
Sin embargo, parece que no encuentro una propiedad o método similar en Javascript.
EDITAR: si usa ESLint, la respuesta de @CerebralFart (el for... of... ) podría desencadenar una queja del linter. Se puede abordar aquí.
Puedes usar el método reduce para hacerlo:
const object = { key_1: 'value_1', key_2: 'value_2', key_3: 'value_3' }; const new_object = Object.keys(object).reduce((accumulator, currentValue)=> { accumulator[currentValue] = null; return accumulator; }, {}); console.log(new_object)No hay necesidad de hacer esto más complicado que un simple bucle for:
const object = { key_1: 'value_1', key_2: 'value_2', key_3: 'value_3' }; const newObject = {}; for (const key in object) { newObject[key] = null } console.log(newObject);O, si solo tienes las llaves
const keys = ['key_1', 'key_2', 'key_3']; const newObject = {}; for (const key of keys) { newObject[key] = null } console.log(newObject); ETA: También podría usar Object.fromEntries con algún mapeo. Dependiendo de lo que quiera hacer con el objeto, esto puede ser marginalmente más rápido.
const object = { key_1: 'value_1', key_2: 'value_2', key_3: 'value_3' }; const newObject = Object.fromEntries(Object.keys(object).map(key => [key, null])); console.log(newObject);