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
});