So this is very weird, I have a foreach function like this:
let cookieValue = \'\';
cookieList.forEach(function(cookieItem) {
const cookieParts = co
Your code works "fine" at first because you're manually changing the value of cookieValue
.
Array.prototype.forEach doesn't do anything with the returning value of the callback you pass to it.
For this case, I'd use a combination of Array.prototype.map and 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;
Your return value in the forEach function return in that function. By placing the return in the outer function, you return that value when that function is called. See this simplified example.
function x(){
function y(){
return 5 // Does not return in the x function
}
y() // = 5
return 7
}
x() // =7
You seem like you are looking for 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
});
The return of forEach is ignored but you can use map and 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"