No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Playground: Closure para Almacenar Datos de Mascotas

10/13

Aportes 130

Preguntas 6

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Me encantan estos playgrounds, espero los incorporen en todos los cursos 馃槂

export function createPetList() {
  const petList = [];
  return function addPet(myPet) {
    if (myPet) {
      petList.push(myPet);
    }
    return petList;
  }
}

Les comparto mi soluci贸n.

export function createPetList() {
  const pets = []
  return (info) => info ? pets.push(info): pets
}

Si quieren probar en VSCode con el Code Runner, sin el console.log no devuelve nada, tambi茅n hay que quitar el 鈥渆xport鈥. A m铆 este me sali贸 bien a la primera, el playground anterior fue frustrante, ya voy entendiendo xD

function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  const petList = [];
  return function (newPet) {
    if (newPet) {
      petList.push(newPet);
    }
    return petList;
  };
}
const myPetList = createPetList();

console.log(myPetList("michi"));
console.log(myPetList("firulais"));
console.log(myPetList());

No pongan los resultados en los comentarios, si no no tiene sentido que pongan playgrounds鈥 es lo mismo que hacer un spoiler 馃槮

Wow este sistema de Playground es incredible!

Tuve que ver la clase como 4 veces pero creo que lo tengo:
s closures son una caracter铆stica importante de JavaScript, y entender c贸mo funcionan es esencial para escribir c贸digo limpio y eficiente. Un closure es una funci贸n que se define dentro de otra funci贸n, y que tiene acceso a las variables y par谩metros de la funci贸n externa. Adem谩s, el closure mantiene una referencia a los valores de estas variables, incluso despu茅s de que la funci贸n externa ha terminado de ejecutarse.

Veamos un ejemplo para entender mejor c贸mo funcionan los closures. Imagina que queremos escribir una funci贸n que multiplique un n煤mero por un factor, pero queremos definir el factor en una funci贸n externa:

function multiplicarPor(factor) {
  return function(numero) {
    return numero * factor;
  }
}

var duplicar = multiplicarPor(2);
var triplicar = multiplicarPor(3);

console.log(duplicar(5)); // Output: 10
console.log(triplicar(5)); // Output: 15

En este ejemplo, la funci贸n multiplicarPor devuelve otra funci贸n que realiza la multiplicaci贸n. La funci贸n interna mantiene una referencia al valor de factor, que se define en la funci贸n externa. Cuando llamamos a multiplicarPor(2), se devuelve una funci贸n que multiplica el n煤mero por 2. Al llamar a multiplicarPor(3), se devuelve otra funci贸n que multiplica el n煤mero por 3. En ambos casos, se crea un closure que mantiene una referencia al valor de factor.

En resumen, los closures son 煤tiles porque permiten crear funciones que mantienen una referencia a los valores de las variables y par谩metros de la funci贸n externa, incluso despu茅s de que la funci贸n externa ha terminado de ejecutarse. Esto hace que las funciones sean m谩s flexibles y reutilizables, y puede ayudar a evitar errores comunes en el c贸digo.

Yo quiero dar un consejo,
No se si alguien pasa por lo mismo que yo pase y aun me pasa, que al momento de que se te presenta un desafio piensas que no puedes.
Quiero decirte que si puedes, no importa cuantas veces te equivoques, tu puedes, int茅ntalo todas las veces que sea necesario, tu puedes conseguir la respuesta

Esto si que es la educaci贸n del futuro!

Para resolver este desaf铆o, se puede crear una funci贸n llamada 鈥渃reatePetList鈥 que al ser llamada inicialmente crea una closure que almacena un array vac铆o. Cada vez que se llama a esta funci贸n con un par谩metro, se agrega ese par谩metro al array almacenado en la closure. Si se llama a la funci贸n sin pasarle ning煤n par谩metro, entonces se retorna el array completo almacenado en la closure. A continuaci贸n se presenta un ejemplo de c贸digo en JavaScript para ilustrar c贸mo podr铆a implementarse esta soluci贸n:

export function createPetList() {
  let petList = [];
  return function (pet) {
    if (pet === undefined) {
      return petList;
    }
    petList.push(pet);
  }
}

Mi soluci贸n:

export function createPetList() {
  const petList = []

  return (pet) => {
    if (pet) petList.push(pet)
    
    return petList
  }
}
export function createPetList() {
  const pets = [];
  return petName => petName ? pets.push(petName) : pets;
}

Mi solucion

export function createPetList() {
  let _mascotas = [];

  return function guardarMascota(mascota) {
    if (mascota) {
      _mascotas.push(mascota);
    }
    return _mascotas;
  };
}

Comparto mi soluci贸n

export function createPetList() {
  let listaPerros = [];
  function agregarPerros(a) {
    if (!a) {
      return listaPerros;
    } else { 
      listaPerros.push(a);  
    }
  }
  return agregarPerros;
}
export function createPetList() {
  const list = [];
  return function addPet(myPet) {
    if (myPet) {
      list.push(myPet);
    }
    return list;
  }
}
export function createPetList() {
  let lista = [];
  function mascotas(mascota) {
    if (!mascota) {
      return lista;
    }
    lista.push(mascota);
  }
  return mascotas;
}

Aqu铆 mi c贸digo:


function createPetList() {
    const pets = [];
    
    function addPet(pet) {
        if (pet) {
            pets.push(pet);
            return pets
        }
        return pets
    }
    console.log(pets);
    return addPet;
}
const myPetList = createPetList();
myPetList("michi");
myPetList("firulais");
myPetList();
Estas actividades son muy buenas Mi humilde soluci贸n ```js export function createPetList() { // Tu c贸digo aqu铆 馃憟 const list = []; return function (pet) { if (pet) list.push(pet); else return list; } } ```
Mi soluci贸n: ```js export const createPetList = () => { let list = []; return (name) => { if (name) { list.push(name); } return list }; }; ```
```js export function createPetList() { const petList = []; return function addPet(myPet) { myPet ? petList.push(myPet) : petList; return petList; } } ```

Soluci贸n 馃憟馃憖馃敟

function data() {
  let pet = [];

  function add(new_pet) {
    new_pet ? pet.push(new_pet) : console.log(pet);
  }

  return add;
}

const my_pet = data();
my_pet("cat");
my_pet({ pet: "dog" });
my_pet(["fish", "pig"]);
my_pet();

// [ 'cat', { pet: 'dog' }, [ 'fish', 'pig' ] ]
Mi c贸digo:function createPetList () { 聽 聽 let petList = \[];聽 聽 // console.log(petList) 聽 聽 function addPet(*pet*) { 聽 聽 聽 聽 if (typeof(*pet*) != "undefined") {聽 聽 聽 聽 聽 聽 // console.log(pet)聽 聽 聽 聽 聽 聽 petList.push(*pet*)聽 聽 聽 聽 聽 聽 console.log(petList)聽 聽 聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 return petList;聽 聽 } 聽 聽 return addPet;聽 聽 } ```js function createPetList () { let petList = []; // console.log(petList) function addPet(pet) { if (typeof(pet) != "undefined") { // console.log(pet) petList.push(pet) console.log(petList) } return petList; } return addPet; } ```
Mi c贸digo (PD: me hab铆a faltado el function createPetList () { 聽 聽 let petList = \[];聽 聽 // console.log(petList) 聽 聽 function addPet(*pet*) { 聽 聽 聽 聽 if (typeof(*pet*) != "undefined") {聽 聽 聽 聽 聽 聽 // console.log(pet)聽 聽 聽 聽 聽 聽 petList.push(*pet*)聽 聽 聽 聽 聽 聽 console.log(petList)聽 聽 聽 聽 }聽 聽 聽 聽 聽 聽 聽 聽 return petList;聽 聽 } 聽 聽 return addPet;聽 聽 }**<u>return petList </u>**y eso me hac铆a fallar): ```js function createPetList () { let petList = []; // console.log(petList) function addPet(pet) { if (typeof(pet) != "undefined") { // console.log(pet) petList.push(pet) console.log(petList) } return petList; } return addPet; } ```

Soluci贸n al playground

export function createPetList() {
  const petList = [];
  return (arg) => {
    if (arg) {
      petList.push(arg);
    } else {
      return petList;
    }
  };
}

reto solcionado

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let animals = []
  return function addanimal(animal) {
    if (animal) {
      animals.push(animal)
      return animals
    } else {
      return animals
    }
  }
}

```js export function createPetList() { let petNames = []; const addPet = (pet) => { return pet ? petNames.push(pet) : petNames; } return addPet } ```
Mi solucion: `export function createPetList() {聽 const pets = [];聽 function creator(pet) {聽 聽 if (pet) {聽 聽 聽 pets.push(pet);聽 聽 }聽 聽 return pets;聽 }聽 return creator;}`

Explicaci贸n:

_






Mi soluci贸n al playground

Esta es la soluci贸n que yo hice: ![](https://static.platzi.com/media/user_upload/image-9fda3d45-db98-452b-8e63-b3581e985b3f.jpg)

Mi soluci贸n

export  function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  const petsList = []

  function addPetlist(newPet) {
    return newPet ? petsList.push(newPet) : petsList

  }
  return addPetlist
}

export function createPetList() {
  let list = []
  return function (element) {
    return element ? list.push(element) : list
  }
}

Me fascina los playgrounds de plazi me parecen demasiado 煤tiles sigan haci茅ndolos porfa!! 馃槂

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let petList = [];
  return function createList(name) { // Crear la funcion para crear listas
    if (name) {   // pregunta si hay nombre a agregar
      petList.push(name) // agrega el nombre
      return // se sale de funcion principal createPetList
    }
    return petList // Si no agrego nombre te regresa la lista de nombres
  }
}

Genial鈥 no sab铆a que era el concepto de closures y me parece genial.

export function createPetList() {
  const animals = [];
  return (newAnimal) => {
    newAnimal && animals.push(newAnimal);
    return animals
  }
}

function pets (){

    let pets = new Array();
    function add (pet) {
        pets.push(pet)
        return console.log(`pets: ${pets}`);

    }
    return add;
}

const milena = pets();

milena("Firulais");
milena("Dam");
milena("Princesa");
milena();

Mi soluci贸n 馃槂

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  const pets = [];
  return function(pet) {
    if (!pet) {
      return pets;
    }
    pets.push(pet);
  }
}

const myPetList = createPetList();
myPetList("michi");
myPetList("firulais");
myPetList();
function createPetList() {
  const petList = []
  return function (newPet) {
    if (newPet) {
      petList.push(newPet)
    }
    return pet
  }
}

Lo mas minimalista que pude.

export function createPetList() {
  let petList = [];
  return (pet) => {
    return (!pet) ? petList : petList.push(pet);
  }
}

Mi soluci贸n un poco minimalista:

export function createPetList() {
  let petList = [];
  return (pet) => { 
    return (pet == undefined) ? petList : petList.push(pet);
  }
}

Closure para guardar datos de mascotas

Para permitir que los datos de las mascotas puedan venir en forma de objetos, strings o arrays, se implementa la funci贸n agregaMascota() de la siguiente manera:

function createPetList() {
  let myMascota = [];

  function agregaMascota(data) {
    if (arguments.length !== 0) {
      if (Array.isArray(data)) {
        myMascota = myMascota.concat(data);
      } else {
        myMascota.push(data);
      }
    } else {
      return myMascota;
    }
  }

  return agregaMascota;
}
let resultado = createPetList();
  • Si se pas贸 alg煤n argumento a agregaMascota(), se verifica si data es un array utilizando Array.isArray().
    Si data es un array, se utiliza el m茅todo concat() para concatenar los elementos del array data con el array myMascota.

  • Si data no es un array, se agrega data al final del array myMascota utilizando push().

  • Si no se pas贸 ning煤n argumento a agregaMascota(), se devuelve el array myMascota con todos los datos de las mascotas introducidas hasta ese momento.

De esta manera, puedes llamar a agregaMascota() con diferentes tipos de datos como argumento, como objetos, strings o arrays, y el c贸digo se encargar谩 de manejarlos correctamente.

Ejemplo:

resultado({ nombre: 'Max' });
resultado('Luna');
resultado(['Rocky', 'Bella']);

console.log(resultado()); // Resultado: [{ nombre: 'Max' }, 'Luna', 'Rocky', 'Bella']

Mi solucion al reto

export function createPetList() {
  // Variable para almacenar la lista de mascotas
  const petList = [];

  // Funci贸n de flecha que act煤a como el closure
  return (info) => {
    // Si se proporciona un valor para 'info', se agrega a la lista de mascotas
    if (info) {
      petList.push(info);
    }
    // Se devuelve la lista de mascotas, ya sea vac铆a o con los elementos agregados
    return petList;
  };
}

Comparto mi soluci贸n

export function createPetList() {
  const petList = []
  return (newPet) => {
    if (!newPet) return petList

    petList.push(newPet)
    return petList
  }
}

Mi aporte. Agradecido por el curso 馃槂

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  const mascotas = [];
  return (mascota) => {
    if (Boolean(mascota)) {
      mascotas.push(mascota);
    } else {
      return mascotas;
    }
  }
}

const myPetList = createPetList();

myPetList("michi");

myPetList("firulais");

myPetList();
function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let pets = [];
  return function PetList(animal) {
      if(animal)
        pets.push(animal);
      return pets;
  }
}
const myPetList = createPetList();
myPetList("michis");
myPetList("firulais");
myPetList();

500: INTERNAL_SERVER_ERROR
Code: INTERNAL_FUNCTION_INVOCATION_FAILED
ID: iad1::svkbg-1686687122105-3eaa933e789[

export function createPetList() {
  const pets = [];
  const save = (pet) => {
    if (!pet) return pets;
    pets.push(pet);
  };
  return save;
}

Prueba unitaria

import createPetList from "../../src/closure/createPetListClosure";
describe("Unit test suite for create a pet list", () => {
  test("Should make save a few pets and return a list and should return the pet list if it does not have params", () => {
    const expectedPetList = ["michi", "firulais"];

    const myPetList = createPetList();

    myPetList("michi");
    myPetList("firulais");
    const petList = myPetList();

    expect(petList).toEqual(expectedPetList);
  });
});

Repositorio: https://github.com/zearkiatos/javascript-closures-and-scopes-kata

la clase anterior estuvo genial y este playground estuvo acorde a lo explicado en la clase anterior

export function createPetList() {
  const petList = [];
  function savePet(pet) {
    if (pet) {
      petList.push(pet)
    } else {
      return petList
    }
  }
  return savePet
}```
export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let list = [];
  function addPet(newPet) {
    if (newPet) {
      list.push(newPet);
    } else {
      return list;
    }
  }
  return addPet;
}

function petList(){
    let petList = [];
    return{
        add: function(pet){
            if(pet){
                petList.push(pet);
            }
            console.log(`Pets: ${petList}`);
        },
        remove: function(valor){
            petList = petList.filter(pets => pets !== valor);
            console.log(`Pets: ${petList}`);
        }
    }
}
const myPetList = petList();
myPetList.add('pet1');
myPetList.add('pet2');
myPetList.remove('pet1');

Lo simplifiqu茅 lo m谩s que pude:

function createPetList() {
    const pets = [];
    return (pet) => !pet ? pets : pets.push(pet);
}

Aqu铆 mi soluci贸n, espero les ayude, la prob茅 en VSC ya que en la vista me aparec铆a error de 鈥榡oin鈥 y en la prueba no mostraba nada

const createPetList = () => {
    const petList = [];
    return (pet) => {
        pet ? petList.push(pet) : console.log(petList);
    }
}

const myPetList = createPetList();
myPetList("michi");
myPetList("firulais");
myPetList();

Mi codigo

export function createPetList() {
  const myPetList = []
  return function myPetInfo(myPet) { 
    if (!myPet) {
      return myPetList
    } else { 
      myPetList.push(myPet)
    }
  }
}

Mi soluci贸n

export function createPetList() {
  let petList = [];

  const addPet = (pet = null) => {
    if (pet === null) {
      return petList;
    } else {
      petList.push(pet);
    }
  }
  return addPet;
}

Yo lo hice as铆 xd

export function createPetList() {
  const list = []
  function xd(nombre) {
    if (!nombre) { return list }
    else { list.push(nombre); return list }
  }
  return xd;
}

Comparto mi soluci贸n

export function createPetList() {
  const petList = [];
  return function addPet(myPet) { 
    myPet && petList.push(myPet)
    return petList;
  }
}
 

function myMasco() {

let lisMasco = [];
function adiccMasco(mascota){
if(mascota){
lisMasco.push(mascota);

  }else {
    console.log(`Lista de mascota: ${lisMasco}`);
  }

}

return adiccMasco;
}

const miPrimeraLis = myMasco();

miPrimeraLis(鈥榞atit鈥);
miPrimeraLis(鈥榩erruncho鈥);
miPrimeraLis();

Esta fue mi soluci贸n al problema:

export function createPetList() {
  const savePets = []

  return function (pets) {

    if (pets != undefined) {
      savePets.push(pets);
      return savePets;
    }
    return savePets;
  }
};
export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let datosMascotas;

  function catchInput(input) {
    if (!datosMascotas) datosMascotas = []

    if(!input) return datosMascotas

    datosMascotas.push(input)
  }

  return catchInput
}

comparto la soluci贸n

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  const pets = [];
  function savePet(namePet) {
    if (namePet != undefined)
      pets.push(namePet)

    console.log(pets)
    return pets;
  }
  return savePet;
}

const myPetList = createPetList();
myPetList("michi");
myPetList("firulais");
myPetList();

Esta es mi soluci贸n, quise ser un poco m谩s especifico con la condici贸n para que entender la l贸gica 馃挌



Ac谩 pueden probar el c贸digo:

export function createPetList() {
    const petList = [];
     return function addPet(pet = 0) {
      if (pet != 0) {
        petList.push(pet);
      } else {
        return petList;
      }
    }
  }

const myPetList = createPetList();  

myPetList("michi");

myPetList("firulais");

myPetList();

Este estuvo mas facil que el anterior que no lo entend铆 para nada, almenos ya entiendo bastantico como funciona los closures, con practica lo entender茅 mas y mejor.

Mi soluci贸n:

mi aporte me costo hacerlo solo pero aqui esta

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  const mascotas = [];
  return function listaMascotas(mascota) {
    if (mascota) {
      mascotas.push(mascota)
    }
    return mascotas;
  } 
}

Go!! hay muchas formas鈥 de programar鈥

let vRow = [];

    function funAgruparMascotas(vMascotas = ""){
        if(vMascotas == ""){
            console.log(`No se Ingreso Mascota`);
        }else{
            vRow.push(vMascotas);
            console.log(`Mascota ingresado: ${vMascotas}`);
        }
        return vRow;
    }
    return funAgruparMascotas;

Soluci贸n

 export default function createPetList() {
  let pets = []
  return (pet) => {
    // Se agregan los valores nuevos a medida que se ejecuta la funci贸n anonima interior
    pets = [...pets, pet]
    // Se limpia los valores falsy del array que pueden llegar ([null, undefined, false, NaN, 0, -0, 0n, ""]) antes de retornar los nuevos campos agregados
    return pets.filter(Boolean)
  }
} 
<code> 
function mascotas() {
    const almacenarMascotas = []
    function agregarMascotas(mascota) {
        if(mascota){
            almacenarMascotas.push(mascota);
        }
        return almacenarMascotas
    }
    return agregarMascotas
}

const miMascota = mascotas();

console.log(miMascota("perro"));
console.log(miMascota("gato"));
console.log(miMascota());

Quiero mostrarles mi solucion usando una funcion flecha

function createPetList() {
	const petList = [];

	return mypets => {
		if (mypets) {
			petList.push(mypets);
		}
		return petList:
	}
}

Una manera de verlo mas facil es el pensar que si nosotros hacemos

function functionGlobal(){
	return function functionInterna(){
		/// codigo
	}
}

const a = functionGlobal();

y luego le hacemos un console.log a a, a es igual a decir

//function functionGlobal(){
	return function functionInterna(){
		/// codigo
	}
//}

y como es un clousure, aunque a es igual a la functionInterna, sigue almacenando los valores que estan fuer de esa function, por eso podemos hacer esto:

export function createPetList() {
  let petList = [];
  return function pushToPetList(petName) {
    if (petName) {
      return petList.push(petName);
    } else {
      return petList;
    }
  }
}

Ya que, como en la guia dice: el input es

const myPetList = createPetList();

myPetList("michi");

myPetList("firulais");

myPetList();

entonces myPetList es igual a la function que es retornada, que en este caso es pushToPetList(petName). entonces myPetList es igual a:

function pushToPetList(petName) {
    if (petName) {
      return petList.push(petName);
    } else {
      return petList;
    }
 }

Es por eso que cuando el input es myPetList('michi'), se llama a pushToPetList('michi'). y cuando se llama a myPetList() sin ningun valor y esta retorna PetList, como es una closure, esta recuerda el valor de PetList pese a estar fuera de la function.

<code>
export function createPetList() {

  const pets = [];


  return mascota =>   mascota ? (pets.push(mascota), pets) : pets;

  
}


const mascotaList = createPetList();

mascotaList();
mascotaList("michy"); 
 export function createPetList() {
  const pets = [];
  return function savePets(pet) {
    return pet ? pets.push(pet) : pets;
  }
}

nos regresa siempre la petList


export function createPetList() {
  const petList = [];
  return pet => (pet && petList.push(pet), petList);
}

Mi solucion:
.
.
.
.
.
.
.
.
.

.

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  const petList = [];
  function addPet(myPet) {
    if (myPet) {
      petList.push(myPet);
    }
    return petList;
  }
  return addPet;
}

va mi solucion para este playground
.
.
.
.
.
.
.
.
.
.
.
.

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let petList = [];
  function addPet(pet) {
    if (pet) {
      petList.push(pet)
    }
    return petList; 
  }
  return addPet;
}

隆驴C贸mo van banda?!

Por ac谩 mi soluci贸n por si les sirve 馃挭:

export function createPetList() {
  const petList = [];
  const savePet = (pet) => {
    return !pet ? petList : petList.push(pet)
  }
  return savePet
}

Gracias por tu 鈾.

Esta fue mi versi贸n, fue mas como intentar emular lo aprendido en la clase anterior

export function createPetList() {
  let array = []
  function pet(myPet) {
    if ((myPet === "") || (myPet === null) || (myPet === undefined)) {
      return array
    }else {
      array.push(myPet)
    }
  }
  return pet
}

Va mi c贸digo 馃槃

export function createPetList() {
  const listaMascotas = [];
  function misMascotas(nombreMascota) {
    if (nombreMascota) {
      listaMascotas.push(nombreMascota);
    } else {
      return listaMascotas;
    }
  }
  return misMascotas;
}

habia agregado una validacion para el tipo de variable y funciono, con lo otros ejemplo me di cuenta que esa informaci贸n no era relevante, no se para que la colocan si javascript no la requiere!!!

  // Tu c贸digo aqu铆 馃憟
  let listPets = [];
  function operPets(namePet) {

    if (namePet) {
      listPets.push(namePet);
    }
    else {  //Viene en blanco el parametro
      return listPets;
    }
  }
  return operPets;  
function createPetList(){
    const list = [];

    function petList(pet) {
      if (!pet) {
        return list
        
     
      } else {
        return list.push(pet);
        
      }
     
    }
    return petList;
}

.
.
.
.
.
.
.
.
.
.
.
.
.

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  const petList = [];
  return function addpets(pet){
    if (pet) {
      petList.push(pet);
    } else {
      return petList
    }
  }
}

Esta es mi soluciona al reto:

export function createPetList() {
  let petList = [];

  function addPet(newPet) {
    if (newPet) {
      petList.push(newPet);
    }
    else {
      return petList
    }
  }

  return addPet
}

export function createPetList() {
// Tu c贸digo aqu铆 馃憟
const petList = [];
function processPetData(petData) {
if (petData) {
petList.push(petData);
}
return petList;
}
return processPetData;
}

borre el export y siempre me salia error que tortura.

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let mascotas = [];
  function myPetAc(insertPet) {
    if (insertPet) {
      mascotas.push(insertPet);
    } else {
      return mascotas;
    }
    console.log( mascotas);
  }

  return myPetAc;
}

Mi soluci贸n:

function createPetList() {
  const pets = []
  const addPets = (pet) => {
    if (!pet) {
      return pets
    } else {
      pets.push(pet)
    }
  }
  return addPets
}

Mi soluci贸n al reto

export function createPetList() {
  const petList = [];
  function myPetList(pet) {
    if (!pet) {
      return petList;
    } else {
      petList.push(pet);
    }
  }
  return myPetList;
} 

Mi soluci贸n

export function createPetList() {
  let list = [];
  return function adding(pet) {
    if (pet) {
      list.push(pet);
    } else {
      return list,
    }
  }

}

Les comparto mi solucion, al parecer el desafio requiera que se retorne la lista si no se introducen datos el parametro.

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let petList = []
  function addPet(pet) {
    if (pet !== undefined) {
      petList.push(pet)
    } else {
      return petList
    }
  }
  return addPet;
}

const myPetList = createPetList();

myPetList("michi");

myPetList("firulais");

Mi solucion:

export function createPetList() {
  const petList = [];
  function addPet(NewPet) {
    if (NewPet) {
      petList.push(NewPet);
    }
    return petList;
  }
  return addPet;
}

**Mi soluci贸n **

export function createPetList() {
  let petList = [];
  function addPetToList(name = '') {
    if (name == '') {return petList;}
    petList.push(name);
  }
  return addPetToList;
}

function createPetList() {
  let pets = [];

  function addPet(pet) {
    if (pet) {
      pets.push(pet);
    } else {
      return pets;
    }
  }

  return addPet;
}

const myPetList = createPetList();

Explicaci贸n:

Creamos una funci贸n que devuelve un closure. La variable pets se inicializa con un array vac铆o y se devuelve una funci贸n que tiene acceso a esta variable mediante un closure. La funci贸n interna addPet comprueba si se le ha pasado un argumento, si es as铆, lo a帽ade al array de pets. Si no se pasa ning煤n argumento, devuelve la lista completa de mascotas.

Aqu铆 va mi soluci贸n al playground utilizando closures:

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let list = [];
  const addPet = (pet) => {

    pet ? list.push(pet) : ''
    console.log(list);

    return list;
  }
  return addPet;
}

const myPetList = createPetList();

myPetList("michi");

myPetList("firulais");

Gracias profesor Oscar Barajas

C贸digo al m铆nimo.

export const createPetList = () => {
  const petList = []
  return (pet) => {
    pet && petList.push(pet)
    return petList
  }
}

A煤n tengo dudas 馃槮

mi playgrounds

export function createPetList() {
  let list = []
  return (pet = "") => {
    if (pet == "") return list
    list.push(pet)
  }
}

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  const petList = []
  return function (newPet) {
    if (newPet) {
      petList.push(newPet)
    } else {
      return petList
    }
  }
}

That one

export function createPetList() {
  const pets = [];
  return function addPets(newPet = "") {
    if (newPet == "") {
      return pets;
    } else {
      pets.push(newPet)
    }
  }
}



Listo

export function createPetList() {
  let pets = [];
  let pet;
  function addPets(pet) {
    if (pet){
      return pets.push(pet);
    }
    else {
      return pets;
    }
  }
  return addPets;
}
function createPetList() {
    const petList = [];
  
    function petListCreate(nuevo) {
        if (nuevo!=undefined){
            petList.push(nuevo);
        }else{
            console.log(petList);

        }    
      
      
      
    }
    return petListCreate;
}

const myPetList = createPetList();

myPetList("michi");

myPetList("firulais");

myPetList();

viendo los comentarios me di cuenta que no era necesario especificar !=undefined ya que el solo par谩metro dar铆a falso si no se ingresa

Pues鈥 c贸mo que me confund铆 un poco con las instrucciones pero bueno, al final de cuentas s铆 pas贸 las pruebas:

export function createPetList() {
  const lista = [];
  function addData(value) { 
    value ? lista.push(value) : null;
    if (value) {
      return;
    } else {
      return lista;
    }
  }
  return addData;
}

Mi solucion a este Playground:

export function createPetList() {
  // Tu c贸digo aqu铆 馃憟
  let petList = [];
  return function addPet(pet) {
    if (pet) {
      petList.push(pet);  
    }
    return petList;
  }
}

function createPetList() {
    let petList = [];

    function saveDataPets(myPet) {
        petList.push(myPet)
        if(petList[petList.length -1] === undefined) petList.pop()
        
        return petList
    }

    return saveDataPets;
}

const myPetList = createPetList()

undefined