Obtener propiedades de objetos anidados a partir de una cadena de ruta

Beginner

This tutorial is from open-source community. Access the source code

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:

  1. Utiliza Array.prototype.map() para iterar a través de cada selector y aplica String.prototype.replace() para reemplazar los corchetes con puntos.
  2. Utiliza String.prototype.split() para dividir cada selector en un array de cadenas.
  3. Utiliza Array.prototype.filter() para eliminar cualquier valor vacío.
  4. 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.