valores valor una retorno retornar funcion es6 array javascript foreach return

retorno - retornar valor de una funcion javascript a php



valor de retorno dentro de foreach (3)

Entonces esto es muy extraño, tengo una función foreach como esta:

let cookieValue = ''''; cookieList.forEach(function(cookieItem) { const cookieParts = cookieItem.split(''=''); const value = cookieParts[1]; const key = cookieParts[0]; if (key.trim() === cookieName) { cookieValue = value; return cookieValue; } }); return cookieValue;

que funciona bien, sin embargo cuando cambio las líneas dentro de la instrucción if a una sola línea:

return value;

Devuelve indefinido siempre.

¿Alguna idea de lo que puede estar pasando aquí?


El retorno de forEach se ignora, pero puede usar map y filter:

function getCookieValue(cookieList, cookieName) { var val = cookieList.map(function(cookieItem) { var cookieParts = cookieItem.split(''=''); var value = cookieParts[1]; var key = cookieParts[0]; return (key.trim() === cookieName) ? value : null; }) .filter((value) => { return value != null })[0]; return val; } let cookieValue = getCookieValue(["key1=val1", "key2=val2"], "key2"); // > "val2"


Su código funciona "bien" al principio porque está cambiando manualmente el valor de cookieValue .

Array.prototype.forEach no hace nada con el valor de devolución de la devolución de llamada que le pasa.

Para este caso, utilizaría una combinación de Array.prototype.map y Array.prototype.reduce :

let cookieValue = cookieList.map(function(cookieItem) { const cookieParts = cookieItem.split(''=''); const value = cookieParts[1]; const key = cookieParts[0]; if (key.trim() !== cookieName) { return null; } return value; }).reduce(function(a, b) { return a || b; }, ''''); return cookieValue;


Su valor de retorno en la función forEach regresa en esa función. Al colocar el retorno en la función externa, devuelve ese valor cuando se llama a esa función. Vea este ejemplo simplificado.

function x(){ function y(){ return 5 // Does not return in the x function } y() // = 5 return 7 } x() // =7

Parece que estás buscando Array.find.

let cookieValue = ''''; return cookieList.find(function(cookieItem) { const cookieParts = cookieItem.split(''=''); const value = cookieParts[1]; const key = cookieParts[0]; return key.trim() === cookieName });