Lo mantendré simple. Supongamos que tengo un objeto como este:
let myObj = { name:{ value: "John", type: "contains" }, age:{ value: "5", type: "contains" } } ¿Cómo puedo crear un nuevo objeto que contenga la clave principal pero el valor sea solo el value de su objeto anidado, de la siguiente manera:
let myNewObj = { name: "John", age: "5" }Gracias por adelantado.
Si solo desea extraer la clave de value para cada objeto, puede hacer algo como esto:
let myObj = { name:{ value: "John", type: "contains" }, age:{ value: "5", type: "contains" } } let newObj = {} for (const key in myObj) { newObj[key] = myObj[key].value; } console.log(newObj); // { // age: "5", // name: "John" // }Convierta el objeto en su matriz de entradas y mapéelo para devolver [key,value]
Luego convierta a un nuevo objeto usando Object.fromEntries
let myObj = { name:{ value: "John", type: "contains" }, age:{ value: "5", type: "contains" } } let myNewObj = Object.fromEntries(Object.entries(myObj).map(([key,{value}])=>[key,value])) console.log(myNewObj)En general, para poder transformar todos los valores de las propiedades de un objeto de acuerdo con una función de mapeo, puede usar Object.entries para hacer una matriz de matrices [key, value] para cada propiedad y luego usar Object.fromEntries para reconstituir un objeto de esas matrices. Puede proporcionar una función de transformación genérica en medio de esa operación como esta:
const transformValues = (obj, transform) => Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, transform(value)])); La función de transformación que necesita en su caso específico tomará el valor de la propiedad (que es un objeto) y simplemente devolverá su propiedad de value . Así: ({ value }) => value ( Esto es bastante fácil con la desestructuración).
let myObj = { name: { value: "John", type: "contains" }, age: { value: "5", type: "contains" } } const transformValues = (obj, transform) => Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, transform(value)])); const result = transformValues(myObj, ({ value }) => value); console.log(result);