Introducción
En este laboratorio, exploraremos cómo recuperar propiedades de objetos anidados utilizando una cadena de ruta dada en JavaScript. Aprenderemos cómo utilizar varios métodos de arrays, como map(), filter() y reduce(), para extraer valores específicos de objetos complejos. Esta habilidad es esencial para trabajar con grandes conjuntos de datos y APIs que devuelven objetos JSON anidados.
Cómo recuperar propiedades de objetos anidados a partir de cadenas de ruta
Para practicar la codificación, abre la Terminal/SSH y escribe node.
La siguiente función recupera un conjunto de propiedades de un objeto utilizando selectores especificados en una cadena de ruta. Para lograr esto, sigue estos pasos:
- Utiliza
Array.prototype.map()para iterar a través de cada selector y aplicaString.prototype.replace()para reemplazar los corchetes con puntos. - Utiliza
String.prototype.split()para dividir cada selector en un array de cadenas. - Utiliza
Array.prototype.filter()para eliminar cualquier valor vacío. - Utiliza
Array.prototype.reduce()para recuperar el valor indicado por cada selector.
Aquí está la función:
const get = (from, ...selectors) =>
[...selectors].map((s) =>
s
.replace(/\[([^\[\]]*)\]/g, ".$1.")
.split(".")
.filter((t) => t !== "")
.reduce((prev, cur) => prev && prev[cur], from)
);
Puedes utilizar esta función para recuperar valores de un objeto anidado utilizando una cadena de ruta. Aquí tienes un ejemplo:
const obj = {
selector: { to: { val: "val to select" } },
target: [1, 2, { a: "test" }]
};
get(obj, "selector.to.val", "target[0]", "target[2].a");
// ['val to select', 1, 'test']
Resumen
¡Felicidades! Has completado el laboratorio "Get Nested Object Property From Path String". Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.