所以这很奇怪,我有这样的foreach函数:
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;
工作正常,但是当我将if语句中的行更改为单行时:
return value;
它总是返回undefined。
关于这里可能发生什么的任何想法?
答案 0 :(得分:2)
忽略forEach的返回,但您可以使用map和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"
答案 1 :(得分:0)
您的代码有效"罚款"首先是因为您手动更改了cookieValue
的值。
Array.prototype.map
对您传递给它的回调的返回值没有做任何事情。
在这种情况下,我会使用Array.prototype.reduce
和{{3}}的组合:
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;
答案 2 :(得分:0)
forEach函数中的返回值将返回该函数。通过将返回值放在外部函数中,可以在调用该函数时返回该值。请参阅此简化示例。
function x(){
function y(){
return 5 // Does not return in the x function
}
y() // = 5
return 7
}
x() // =7
您似乎在寻找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
});